generateModel static method
Implementation
static String generateModel(Model model) {
var output = StringBuffer();
output.writeln('// This file was generated by dart_openapi_model_gen');
for (var dependency in model.dependencies) {
final dependencyFilename = '${dependency.toSnakeCase()}.dart';
output.writeln('import \'./$dependencyFilename\';\n\n');
}
output.writeln('class ${model.className()} {');
output.writeln(' static const modelName = "${model.modelName}";\n');
for (var property in model.properties) {
final optionalMarker =
property.isOptional && property.type != 'dynamic' ? '?' : '';
output
.writeln(' final ${property.type}$optionalMarker ${property.name};');
}
// Constructor with named parameters and default values
output.writeln();
output.write(' ${model.className()}({');
for (var property in model.properties) {
final requiredMarker = property.isRequired ? 'required ' : '';
output.write('$requiredMarker this.${property.name}, ');
}
output.writeln('});\n');
// copyWith method
output.writeln(' ${model.className()} copyWith({');
for (var property in model.properties) {
// dynamic doesn't require optional, so for linting purposes
final optionalMarker = property.type == 'dynamic' ? '' : '?';
output.writeln(' ${property.type}$optionalMarker ${property.name},');
}
output.write(' }) => ${model.className()}(\n');
for (var property in model.properties) {
output.writeln(
' ${property.name}: ${property.name} ?? this.${property.name}, ');
}
output.writeln(' );\n');
// toJson method
output.writeln(' Map<String, dynamic> toJson() => {');
for (var property in model.properties) {
final optionalMarker = property.isOptional ? '?' : '';
final toStringMarker = property.category == TypeCategory.enumeration
? '$optionalMarker.name'
: '';
output.writeln(
' \'${property.originalName}\': ${property.name}$toStringMarker,');
}
output.writeln(' };\n');
// fromJson method
output.write(
' factory ${model.className()}.fromJson(Map<String, dynamic> json) => ${model.className()}(\n');
for (var property in model.properties) {
output
.writeln(' ${property.name}: ${propertyFromJson(property)},');
}
output.writeln(' );');
// Close class
output.writeln('}');
return output.toString();
}