parse method
Implementation
EntityResult parse(
Map<String, dynamic> json,
String name, {
String? parentPrefix,
}) {
final fullName = prefixNested && parentPrefix != null
? '$parentPrefix$name'
: name;
final fields = <Field>[];
final nested = <EntityResult>[];
for (final entry in json.entries) {
final key = entry.key;
final value = entry.value;
final isNullable = key.endsWith('?');
final fieldName = isNullable ? key.substring(0, key.length - 1) : key;
if (value is Map<String, dynamic>) {
// Nested object
final nestedName = _toPascal(fieldName);
final nestedResult = parse(
value,
nestedName,
parentPrefix: prefixNested ? fullName : null,
);
nested.add(nestedResult);
fields.add(Field(fieldName, '\$${nestedResult.name}', isNullable));
} else if (value is List && value.isNotEmpty && value.first is Map) {
// List of objects
final nestedName = _toPascal(_singularize(fieldName));
final nestedResult = parse(
value.first as Map<String, dynamic>,
nestedName,
parentPrefix: prefixNested ? fullName : null,
);
nested.add(nestedResult);
fields.add(
Field(fieldName, 'List<\$${nestedResult.name}>', isNullable),
);
} else {
// Primitive
final type = _inferType(value);
fields.add(Field(fieldName, type, isNullable || value == null));
}
}
return EntityResult(fullName, fields, nested);
}