generateSnapshotClass function

String generateSnapshotClass(
  1. ClassElement c
)

Implementation

String generateSnapshotClass(ClassElement c) {
  final fields = c.publicFields;
  final initializers = fields.map((f) {
    return '${f.displayName} = \$mut.${f.displayName}';
  }).toList();

  final initializerList = [
    if (initializers.isNotEmpty) ...[
      ': ',
      initializers.join(', '),
    ],
  ].join('');

  final fieldsDefinition = fields.map((f) {
    return 'final $f;';
  }).join(' ');

  final description = fields.map((f) {
    final name = f.displayName;
    return '$name = \$$name';
  }).join(', ');

  final params = c.defaultConstructor.parameters;

  return '''
class ${c.snapshotName}
  with SaveEquitable {
  ${c.snapshotConstructor}(
    ${c.displayName} \$mut,
    ${params.isEmpty ? '' : 'this.params,'}
  ) $initializerList;

  $fieldsDefinition
  ${params.isEmpty ? '' : 'final ${c.parameterClassName} params;'}

  @override
  List<Object?> get \$keys => [
    ${fields.map((f) => f.displayName).join(',')}
  ];

  @override
  String toString() =>
    '${c.displayName} { $description }';
}
''';
}