blob: 8be0410e45f0a9bdf7cf8585f3680bcd2df6002d [file] [edit]
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:code_builder/code_builder.dart';
import '../generation_options.dart';
import '../located_message_file.dart';
class FieldGeneration {
final GenerationOptions options;
final Iterable<LocatedMessageFile> messageFiles;
final String initialLocale;
FieldGeneration(
this.options,
this.messageFiles,
this.initialLocale,
);
List<Field> generate() {
final loadingStrategy = Field(
(fb) {
final returnType = const Reference('Future<String>').symbol;
fb
..name = '_assetLoader'
..modifier = FieldModifier.final$
..type = Reference('$returnType Function(String id)');
},
);
final currentLocale = Field(
(fb) => fb
..type = const Reference('String')
..name = '_currentLocale'
..assignment = Code("'$initialLocale'"),
);
final messages = Field(
(fb) => fb
..modifier = FieldModifier.final$
..type = const Reference('Map<String, MessageList>')
..name = '_messages'
..assignment = const Code('{}'),
);
final dataFiles = Field(
(fb) {
final paths = messageFiles
.map((e) => """
'${e.locale}' : ('${e.namespacedPath(options.packageName)}', '${e.hash}')""")
.join(',');
fb
..name = '_dataFiles'
..modifier = FieldModifier.constant
..static = true
..assignment = Code('{$paths}');
},
);
final pluralSelector = Field(
(fb) => fb
..name = 'pluralSelector'
..type = const Reference(
'''Message Function(num howMany, {Map<int, Message>? numberCases, Map<int, Message>? wordCases, Message? few, Message? many, Message other, String? locale})'''),
);
final fields = [
loadingStrategy,
currentLocale,
messages,
dataFiles,
if (options.pluralSelector == PluralSelectorType.custom) pluralSelector,
];
return fields;
}
}