generateDataClassBody method

String generateDataClassBody(
  1. SquintGeneratorOptions options
)

Generate data class from CustomType.

{@category generator}

Implementation

String generateDataClassBody(SquintGeneratorOptions options) {
  // Sort members so required fields are serialized first and nullables last.
  final sortedMembers = members..sort((a, b) => !a.type.nullable ? -1 : 1);

  // Print the members as constructor fields.
  final constructorMembers =
      sortedMembers.map((e) => e.printConstructor).join("\n");

  // Print the members as class fields.
  final fieldMembers = sortedMembers.map((e) {
    return options.includeJsonAnnotations
        ? e.printField(alwaysAddJsonValue: options.alwaysAddJsonValue)
        : e.printFieldWithoutAnnotations;
  }).join(options.blankLineBetweenFields ? "\n\n" : "\n");

  return """
    |@squint
    |class $className {
    |   const $className ({
    |      $constructorMembers
    |   });
    |
    |   $fieldMembers
    |}
    |
    """
      .format;
}