generateDataClassFile method
Generate data class from CustomType.
{@category generator}
Implementation
String generateDataClassFile({
SquintGeneratorOptions options = standardSquintGeneratorOptions,
}) {
final buffer = StringBuffer()..write("""
|// Copyright (c) 2021 - 2023 Buijs Software
|//
|// Permission is hereby granted, free of charge, to any person obtaining a copy
|// of this software and associated documentation files (the "Software"), to deal
|// in the Software without restriction, including without limitation the rights
|// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|// copies of the Software, and to permit persons to whom the Software is
|// furnished to do so, subject to the following conditions:
|//
|// The above copyright notice and this permission notice shall be included in all
|// copies or substantial portions of the Software.
|//
|// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|// SOFTWARE.
|
|import 'package:squint_json/squint_json.dart';
|""");
final unwrapped =
unwrapNestedTypes(members.map((e) => e.type).toList()).toSet();
final enums = unwrapped.whereType<EnumType>().toSet();
final customs = unwrapped.whereType<CustomType>().toSet();
if (options.includeCustomTypeImports && !options.generateChildClasses) {
importStatements(Set<AbstractType>.of(unwrapped)
..addAll(enums)
..addAll(customs))
.forEach(buffer.write);
}
buffer.write("""
/// Autogenerated data class by Squint.
${generateDataClassBody(options)}""");
/// If generateChildClasses is set to false
/// then skip code generation for TypeMember CustomTypes/EnumTypes.
if (options.generateChildClasses) {
for (final ct in customs.toSet()) {
buffer.write(ct.generateDataClassBody(options));
}
for (final et in enums.toSet()) {
buffer.write(et.generateEnumClassBody(options));
}
}
final toBeEncoded = members.where((element) {
return element.type is CustomType || element.type is EnumType;
}).map((element) {
final name = element.name;
final annotations = element.annotations;
final type = element.type;
if (type is CustomType) {
return TypeMember(
name: name,
type: customs
.firstWhere((element) => element.className == type.className),
annotations: annotations,
);
}
if (type is EnumType) {
return TypeMember(
name: name,
type: enums
.firstWhere((element) => element.className == type.className),
annotations: annotations,
);
}
throw SquintException("Unknown data type: $type");
}).toList();
for (final ct in toBeEncoded) {
buffer
..write(ct.encodingMethodBody)
..write(ct.decodingMethodBody);
}
return buffer.toString().formattedDartCode;
}