|
@@ -0,0 +1,303 @@
|
|
|
+class {{{classname}}} {
|
|
|
+{{>dart_constructor}}
|
|
|
+{{#vars}}
|
|
|
+ {{#description}}
|
|
|
+ /// {{{.}}}
|
|
|
+ {{/description}}
|
|
|
+ {{^isEnum}}
|
|
|
+ {{#minimum}}
|
|
|
+ {{#description}}
|
|
|
+ ///
|
|
|
+ {{/description}}
|
|
|
+ /// Minimum value: {{{.}}}
|
|
|
+ {{/minimum}}
|
|
|
+ {{#maximum}}
|
|
|
+ {{#description}}
|
|
|
+ {{^minimum}}
|
|
|
+ ///
|
|
|
+ {{/minimum}}
|
|
|
+ {{/description}}
|
|
|
+ /// Maximum value: {{{.}}}
|
|
|
+ {{/maximum}}
|
|
|
+ {{^isNullable}}
|
|
|
+ {{^required}}
|
|
|
+ {{^defaultValue}}
|
|
|
+ ///
|
|
|
+ /// Please note: This property should have been non-nullable! Since the specification file
|
|
|
+ /// does not include a default value (using the "default:" property), however, the generated
|
|
|
+ /// source code must fall back to having a nullable type.
|
|
|
+ /// Consider adding a "default:" property in the specification file to hide this note.
|
|
|
+ ///
|
|
|
+ {{/defaultValue}}
|
|
|
+ {{/required}}
|
|
|
+ {{/isNullable}}
|
|
|
+ {{/isEnum}}
|
|
|
+ {{{datatypeWithEnum}}}{{#isNullable}}?{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}?{{/defaultValue}}{{/required}}{{/isNullable}} {{{name}}};
|
|
|
+
|
|
|
+{{/vars}}
|
|
|
+ @override
|
|
|
+ bool operator ==(Object other) => identical(this, other) || other is {{{classname}}} &&
|
|
|
+ {{#vars}}
|
|
|
+ other.{{{name}}} == {{{name}}}{{^-last}} &&{{/-last}}{{#-last}};{{/-last}}
|
|
|
+ {{/vars}}
|
|
|
+
|
|
|
+ @override
|
|
|
+ int get hashCode =>
|
|
|
+ // ignore: unnecessary_parenthesis
|
|
|
+ {{#vars}}
|
|
|
+ ({{#isNullable}}{{{name}}} == null ? 0 : {{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}{{{name}}} == null ? 0 : {{/defaultValue}}{{/required}}{{/isNullable}}{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.hashCode){{^-last}} +{{/-last}}{{#-last}};{{/-last}}
|
|
|
+ {{/vars}}
|
|
|
+
|
|
|
+ @override
|
|
|
+ String toString() => '{{{classname}}}[{{#vars}}{{{name}}}=${{{name}}}{{^-last}}, {{/-last}}{{/vars}}]';
|
|
|
+
|
|
|
+ Map<String, dynamic> toJson() {
|
|
|
+ final json = <String, dynamic>{};
|
|
|
+ {{#vars}}
|
|
|
+ {{#isNullable}}
|
|
|
+ if (this.{{{name}}} != null) {
|
|
|
+ {{/isNullable}}
|
|
|
+ {{^isNullable}}
|
|
|
+ {{^required}}
|
|
|
+ {{^defaultValue}}
|
|
|
+ if (this.{{{name}}} != null) {
|
|
|
+ {{/defaultValue}}
|
|
|
+ {{/required}}
|
|
|
+ {{/isNullable}}
|
|
|
+ {{#isDateTime}}
|
|
|
+ {{#pattern}}
|
|
|
+ json[r'{{{baseName}}}'] = _dateEpochMarker == '{{{pattern}}}'
|
|
|
+ ? this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.millisecondsSinceEpoch
|
|
|
+ : this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc().toIso8601String();
|
|
|
+ {{/pattern}}
|
|
|
+ {{^pattern}}
|
|
|
+ json[r'{{{baseName}}}'] = this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc().toIso8601String();
|
|
|
+ {{/pattern}}
|
|
|
+ {{/isDateTime}}
|
|
|
+ {{#isDate}}
|
|
|
+ {{#pattern}}
|
|
|
+ json[r'{{{baseName}}}'] = _dateEpochMarker == '{{{pattern}}}'
|
|
|
+ ? this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.millisecondsSinceEpoch
|
|
|
+ : _dateFormatter.format(this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc());
|
|
|
+ {{/pattern}}
|
|
|
+ {{^pattern}}
|
|
|
+ json[r'{{{baseName}}}'] = _dateFormatter.format(this.{{{name}}}{{#isNullable}}!{{/isNullable}}{{^isNullable}}{{^required}}{{^defaultValue}}!{{/defaultValue}}{{/required}}{{/isNullable}}.toUtc());
|
|
|
+ {{/pattern}}
|
|
|
+ {{/isDate}}
|
|
|
+ {{^isDateTime}}
|
|
|
+ {{^isDate}}
|
|
|
+ json[r'{{{baseName}}}'] = this.{{{name}}};
|
|
|
+ {{/isDate}}
|
|
|
+ {{/isDateTime}}
|
|
|
+ {{#isNullable}}
|
|
|
+ } else {
|
|
|
+ // json[r'{{{baseName}}}'] = null;
|
|
|
+ }
|
|
|
+ {{/isNullable}}
|
|
|
+ {{^isNullable}}
|
|
|
+ {{^required}}
|
|
|
+ {{^defaultValue}}
|
|
|
+ } else {
|
|
|
+ // json[r'{{{baseName}}}'] = null;
|
|
|
+ }
|
|
|
+ {{/defaultValue}}
|
|
|
+ {{/required}}
|
|
|
+ {{/isNullable}}
|
|
|
+ {{/vars}}
|
|
|
+ return json;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// Returns a new [{{{classname}}}] instance and imports its values from
|
|
|
+ /// [value] if it's a [Map], null otherwise.
|
|
|
+ // ignore: prefer_constructors_over_static_methods
|
|
|
+ static {{{classname}}}? fromJson(dynamic value) {
|
|
|
+ if (value is Map) {
|
|
|
+ final json = value.cast<String, dynamic>();
|
|
|
+
|
|
|
+ // Ensure that the map contains the required keys.
|
|
|
+ // Note 1: the values aren't checked for validity beyond being non-null.
|
|
|
+ // Note 2: this code is stripped in release mode!
|
|
|
+ assert(() {
|
|
|
+ requiredKeys.forEach((key) {
|
|
|
+ assert(json.containsKey(key), 'Required key "{{{classname}}}[$key]" is missing from JSON.');
|
|
|
+ assert(json[key] != null, 'Required key "{{{classname}}}[$key]" has a null value in JSON.');
|
|
|
+ });
|
|
|
+ return true;
|
|
|
+ }());
|
|
|
+
|
|
|
+ return {{{classname}}}(
|
|
|
+ {{#vars}}
|
|
|
+ {{#isDateTime}}
|
|
|
+ {{{name}}}: mapDateTime(json, r'{{{baseName}}}', '{{{pattern}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/isDateTime}}
|
|
|
+ {{#isDate}}
|
|
|
+ {{{name}}}: mapDateTime(json, r'{{{baseName}}}', '{{{pattern}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/isDate}}
|
|
|
+ {{^isDateTime}}
|
|
|
+ {{^isDate}}
|
|
|
+ {{#complexType}}
|
|
|
+ {{#isArray}}
|
|
|
+ {{#items.isArray}}
|
|
|
+ {{{name}}}: json[r'{{{baseName}}}'] is List
|
|
|
+ ? (json[r'{{{baseName}}}'] as List).map((e) =>
|
|
|
+ {{#items.complexType}}
|
|
|
+ {{items.complexType}}.listFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}}
|
|
|
+ {{/items.complexType}}
|
|
|
+ {{^items.complexType}}
|
|
|
+ e == null ? {{#items.isNullable}}null{{/items.isNullable}}{{^items.isNullable}}const <{{items.items.dataType}}>[]{{/items.isNullable}} : (e as List).cast<{{items.items.dataType}}>()
|
|
|
+ {{/items.complexType}}
|
|
|
+ ).toList()
|
|
|
+ : {{#isNullable}}null{{/isNullable}}{{^isNullable}}const []{{/isNullable}},
|
|
|
+ {{/items.isArray}}
|
|
|
+ {{^items.isArray}}
|
|
|
+ {{{name}}}: {{{complexType}}}.listFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/items.isArray}}
|
|
|
+ {{/isArray}}
|
|
|
+ {{^isArray}}
|
|
|
+ {{#isMap}}
|
|
|
+ {{#items.isArray}}
|
|
|
+ {{{name}}}: json[r'{{{baseName}}}'] == null
|
|
|
+ ? {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}
|
|
|
+ {{#items.complexType}}
|
|
|
+ : {{items.complexType}}.mapListFromJson(json[r'{{{baseName}}}']),
|
|
|
+ {{/items.complexType}}
|
|
|
+ {{^items.complexType}}
|
|
|
+ : mapCastOfType<String, List>(json, r'{{{baseName}}}'),
|
|
|
+ {{/items.complexType}}
|
|
|
+ {{/items.isArray}}
|
|
|
+ {{^items.isArray}}
|
|
|
+ {{#items.isMap}}
|
|
|
+ {{#items.complexType}}
|
|
|
+ {{{name}}}: {{items.complexType}}.mapFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/items.complexType}}
|
|
|
+ {{^items.complexType}}
|
|
|
+ {{{name}}}: mapCastOfType<String, dynamic>(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/items.complexType}}
|
|
|
+ {{/items.isMap}}
|
|
|
+ {{^items.isMap}}
|
|
|
+ {{#items.complexType}}
|
|
|
+ {{{name}}}: {{{items.complexType}}}.mapFromJson(json[r'{{{baseName}}}'{{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}}]) ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/items.complexType}}
|
|
|
+ {{^items.complexType}}
|
|
|
+ {{{name}}}: mapCastOfType<String, {{items.dataType}}>(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/items.complexType}}
|
|
|
+ {{/items.isMap}}
|
|
|
+ {{/items.isArray}}
|
|
|
+ {{/isMap}}
|
|
|
+ {{^isMap}}
|
|
|
+ {{#isBinary}}
|
|
|
+ {{{name}}}: null, // No support for decoding binary content from JSON
|
|
|
+ {{/isBinary}}
|
|
|
+ {{^isBinary}}
|
|
|
+ {{{name}}}: {{{complexType}}}.fromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/isBinary}}
|
|
|
+ {{/isMap}}
|
|
|
+ {{/isArray}}
|
|
|
+ {{/complexType}}
|
|
|
+ {{^complexType}}
|
|
|
+ {{#isArray}}
|
|
|
+ {{#isEnum}}
|
|
|
+ {{{name}}}: {{{items.datatypeWithEnum}}}.listFromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/isEnum}}
|
|
|
+ {{^isEnum}}
|
|
|
+ {{{name}}}: json[r'{{{baseName}}}'] is {{#uniqueItems}}Set{{/uniqueItems}}{{^uniqueItems}}List{{/uniqueItems}}
|
|
|
+ ? (json[r'{{{baseName}}}'] as {{#uniqueItems}}Set{{/uniqueItems}}{{^uniqueItems}}List{{/uniqueItems}}).cast<{{{items.datatype}}}>()
|
|
|
+ : {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}},
|
|
|
+ {{/isEnum}}
|
|
|
+ {{/isArray}}
|
|
|
+ {{^isArray}}
|
|
|
+ {{#isMap}}
|
|
|
+ {{{name}}}: mapCastOfType<String, {{{items.datatype}}}>(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/isMap}}
|
|
|
+ {{^isMap}}
|
|
|
+ {{#isNumber}}
|
|
|
+ {{{name}}}: json[r'{{{baseName}}}'] == null
|
|
|
+ ? {{#defaultValue}}{{{.}}}{{/defaultValue}}{{^defaultValue}}null{{/defaultValue}}
|
|
|
+ : {{{datatypeWithEnum}}}.parse(json[r'{{{baseName}}}'].toString()),
|
|
|
+ {{/isNumber}}
|
|
|
+ {{^isNumber}}
|
|
|
+ {{^isEnum}}
|
|
|
+ {{{name}}}: mapValueOfType<{{{datatypeWithEnum}}}>(json, r'{{{baseName}}}'){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/isEnum}}
|
|
|
+ {{#isEnum}}
|
|
|
+ {{{name}}}: {{{enumName}}}.fromJson(json[r'{{{baseName}}}']){{#required}}{{^isNullable}}!{{/isNullable}}{{/required}}{{^required}}{{#defaultValue}} ?? {{{.}}}{{/defaultValue}}{{/required}},
|
|
|
+ {{/isEnum}}
|
|
|
+ {{/isNumber}}
|
|
|
+ {{/isMap}}
|
|
|
+ {{/isArray}}
|
|
|
+ {{/complexType}}
|
|
|
+ {{/isDate}}
|
|
|
+ {{/isDateTime}}
|
|
|
+ {{/vars}}
|
|
|
+ );
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ static List<{{{classname}}}>? listFromJson(dynamic json, {bool growable = false,}) {
|
|
|
+ final result = <{{{classname}}}>[];
|
|
|
+ if (json is List && json.isNotEmpty) {
|
|
|
+ for (final row in json) {
|
|
|
+ final value = {{{classname}}}.fromJson(row);
|
|
|
+ if (value != null) {
|
|
|
+ result.add(value);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result.toList(growable: growable);
|
|
|
+ }
|
|
|
+
|
|
|
+ static Map<String, {{{classname}}}> mapFromJson(dynamic json) {
|
|
|
+ final map = <String, {{{classname}}}>{};
|
|
|
+ if (json is Map && json.isNotEmpty) {
|
|
|
+ json = json.cast<String, dynamic>(); // ignore: parameter_assignments
|
|
|
+ for (final entry in json.entries) {
|
|
|
+ final value = {{{classname}}}.fromJson(entry.value);
|
|
|
+ if (value != null) {
|
|
|
+ map[entry.key] = value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ // maps a json object with a list of {{{classname}}}-objects as value to a dart map
|
|
|
+ static Map<String, List<{{{classname}}}>> mapListFromJson(dynamic json, {bool growable = false,}) {
|
|
|
+ final map = <String, List<{{{classname}}}>>{};
|
|
|
+ if (json is Map && json.isNotEmpty) {
|
|
|
+ json = json.cast<String, dynamic>(); // ignore: parameter_assignments
|
|
|
+ for (final entry in json.entries) {
|
|
|
+ final value = {{{classname}}}.listFromJson(entry.value, growable: growable,);
|
|
|
+ if (value != null) {
|
|
|
+ map[entry.key] = value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// The list of required keys that must be present in a JSON.
|
|
|
+ static const requiredKeys = <String>{
|
|
|
+{{#vars}}
|
|
|
+ {{#required}}
|
|
|
+ '{{{baseName}}}',
|
|
|
+ {{/required}}
|
|
|
+{{/vars}}
|
|
|
+ };
|
|
|
+}
|
|
|
+{{#vars}}
|
|
|
+ {{^isModel}}
|
|
|
+ {{#isEnum}}
|
|
|
+ {{^isContainer}}
|
|
|
+
|
|
|
+{{>serialization/native/native_enum_inline}}
|
|
|
+ {{/isContainer}}
|
|
|
+ {{#isContainer}}
|
|
|
+ {{#mostInnerItems}}
|
|
|
+
|
|
|
+{{>serialization/native/native_enum_inline}}
|
|
|
+ {{/mostInnerItems}}
|
|
|
+ {{/isContainer}}
|
|
|
+ {{/isEnum}}
|
|
|
+ {{/isModel}}
|
|
|
+{{/vars}}
|