generateDataClassFile method
Generate data class from CustomType.
{@category generator}
Implementation
String generateDataClassFile({
SquintGeneratorOptions options = standardSquintGeneratorOptions,
}) {
final buffer = StringBuffer()..write("""
|// Copyright (c) 2021 - 2025 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().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.where((type) => type.className != className).toSet()) {
buffer.write(ct.generateDataClassBody(options));
}
for (final et in enums.toSet()) {
buffer.write(et.generateEnumClassBody(options));
}
}
final toBeEncoded = _collectToBeEncoded(members, customs, enums);
for (final ct in toBeEncoded) {
buffer
..write(ct.encodingMethodBody)
..write(ct.decodingMethodBody);
}
return buffer.toString().formattedDartCode;
}