writeClassDecode method

  1. @override
void writeClassDecode(
  1. SwiftOptions generatorOptions,
  2. Root root,
  3. Indent indent,
  4. Class classDefinition, {
  5. required String dartPackageName,
})
override

Writes a single class decode method to indent.

Implementation

@override
void writeClassDecode(
  SwiftOptions generatorOptions,
  Root root,
  Indent indent,
  Class classDefinition, {
  required String dartPackageName,
}) {
  final String className = classDefinition.name;
  indent.writeln('// swift-format-ignore: AlwaysUseLowerCamelCase');
  indent.write(
      'static func fromList(_ ${varNamePrefix}list: [Any?]) -> $className? ');

  indent.addScoped('{', '}', () {
    enumerate(getFieldsInSerializationOrder(classDefinition),
        (int index, final NamedType field) {
      final String listValue = '${varNamePrefix}list[$index]';

      _writeDecodeCasting(
        indent: indent,
        value: listValue,
        variableName: field.name,
        type: field.type,
      );
    });

    indent.newln();
    indent.write('return ');
    indent.addScoped('$className(', ')', () {
      for (final NamedType field
          in getFieldsInSerializationOrder(classDefinition)) {
        final String comma =
            getFieldsInSerializationOrder(classDefinition).last == field
                ? ''
                : ',';
        indent.writeln('${field.name}: ${field.name}$comma');
      }
    });
  });
}