generateDataClassFile method

String generateDataClassFile({
  1. SquintGeneratorOptions options = standardSquintGeneratorOptions,
})

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;
}