// // AUTO-GENERATED FILE, DO NOT MODIFY! // // @dart=2.12 // ignore_for_file: unused_element, unused_import // ignore_for_file: always_put_required_named_parameters_first // ignore_for_file: constant_identifier_names // ignore_for_file: lines_longer_than_80_chars part of openapi.api; class MetadataSearchDto { /// Returns a new [MetadataSearchDto] instance. MetadataSearchDto({ this.checksum, this.city, this.country, this.createdAfter, this.createdBefore, this.deviceAssetId, this.deviceId, this.encodedVideoPath, this.id, this.isArchived, this.isEncoded, this.isExternal, this.isFavorite, this.isMotion, this.isNotInAlbum, this.isOffline, this.isReadOnly, this.isVisible, this.lensModel, this.libraryId, this.make, this.model, this.order, this.originalFileName, this.originalPath, this.page, this.personIds = const [], this.resizePath, this.size, this.state, this.takenAfter, this.takenBefore, this.trashedAfter, this.trashedBefore, this.type, this.updatedAfter, this.updatedBefore, this.webpPath, this.withArchived = false, this.withDeleted, this.withExif, this.withPeople, this.withStacked, }); /// /// 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. /// String? checksum; /// /// 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. /// String? city; /// /// 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. /// String? country; /// /// 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. /// DateTime? createdAfter; /// /// 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. /// DateTime? createdBefore; /// /// 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. /// String? deviceAssetId; /// /// 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. /// String? deviceId; /// /// 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. /// String? encodedVideoPath; /// /// 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. /// String? id; /// /// 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. /// bool? isArchived; /// /// 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. /// bool? isEncoded; /// /// 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. /// bool? isExternal; /// /// 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. /// bool? isFavorite; /// /// 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. /// bool? isMotion; /// /// 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. /// bool? isNotInAlbum; /// /// 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. /// bool? isOffline; /// /// 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. /// bool? isReadOnly; /// /// 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. /// bool? isVisible; /// /// 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. /// String? lensModel; /// /// 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. /// String? libraryId; /// /// 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. /// String? make; /// /// 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. /// String? model; /// /// 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. /// AssetOrder? order; /// /// 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. /// String? originalFileName; /// /// 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. /// String? originalPath; /// /// 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. /// num? page; List personIds; /// /// 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. /// String? resizePath; /// /// 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. /// num? size; /// /// 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. /// String? state; /// /// 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. /// DateTime? takenAfter; /// /// 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. /// DateTime? takenBefore; /// /// 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. /// DateTime? trashedAfter; /// /// 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. /// DateTime? trashedBefore; /// /// 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. /// AssetTypeEnum? type; /// /// 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. /// DateTime? updatedAfter; /// /// 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. /// DateTime? updatedBefore; /// /// 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. /// String? webpPath; bool withArchived; /// /// 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. /// bool? withDeleted; /// /// 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. /// bool? withExif; /// /// 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. /// bool? withPeople; /// /// 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. /// bool? withStacked; @override bool operator ==(Object other) => identical(this, other) || other is MetadataSearchDto && other.checksum == checksum && other.city == city && other.country == country && other.createdAfter == createdAfter && other.createdBefore == createdBefore && other.deviceAssetId == deviceAssetId && other.deviceId == deviceId && other.encodedVideoPath == encodedVideoPath && other.id == id && other.isArchived == isArchived && other.isEncoded == isEncoded && other.isExternal == isExternal && other.isFavorite == isFavorite && other.isMotion == isMotion && other.isNotInAlbum == isNotInAlbum && other.isOffline == isOffline && other.isReadOnly == isReadOnly && other.isVisible == isVisible && other.lensModel == lensModel && other.libraryId == libraryId && other.make == make && other.model == model && other.order == order && other.originalFileName == originalFileName && other.originalPath == originalPath && other.page == page && _deepEquality.equals(other.personIds, personIds) && other.resizePath == resizePath && other.size == size && other.state == state && other.takenAfter == takenAfter && other.takenBefore == takenBefore && other.trashedAfter == trashedAfter && other.trashedBefore == trashedBefore && other.type == type && other.updatedAfter == updatedAfter && other.updatedBefore == updatedBefore && other.webpPath == webpPath && other.withArchived == withArchived && other.withDeleted == withDeleted && other.withExif == withExif && other.withPeople == withPeople && other.withStacked == withStacked; @override int get hashCode => // ignore: unnecessary_parenthesis (checksum == null ? 0 : checksum!.hashCode) + (city == null ? 0 : city!.hashCode) + (country == null ? 0 : country!.hashCode) + (createdAfter == null ? 0 : createdAfter!.hashCode) + (createdBefore == null ? 0 : createdBefore!.hashCode) + (deviceAssetId == null ? 0 : deviceAssetId!.hashCode) + (deviceId == null ? 0 : deviceId!.hashCode) + (encodedVideoPath == null ? 0 : encodedVideoPath!.hashCode) + (id == null ? 0 : id!.hashCode) + (isArchived == null ? 0 : isArchived!.hashCode) + (isEncoded == null ? 0 : isEncoded!.hashCode) + (isExternal == null ? 0 : isExternal!.hashCode) + (isFavorite == null ? 0 : isFavorite!.hashCode) + (isMotion == null ? 0 : isMotion!.hashCode) + (isNotInAlbum == null ? 0 : isNotInAlbum!.hashCode) + (isOffline == null ? 0 : isOffline!.hashCode) + (isReadOnly == null ? 0 : isReadOnly!.hashCode) + (isVisible == null ? 0 : isVisible!.hashCode) + (lensModel == null ? 0 : lensModel!.hashCode) + (libraryId == null ? 0 : libraryId!.hashCode) + (make == null ? 0 : make!.hashCode) + (model == null ? 0 : model!.hashCode) + (order == null ? 0 : order!.hashCode) + (originalFileName == null ? 0 : originalFileName!.hashCode) + (originalPath == null ? 0 : originalPath!.hashCode) + (page == null ? 0 : page!.hashCode) + (personIds.hashCode) + (resizePath == null ? 0 : resizePath!.hashCode) + (size == null ? 0 : size!.hashCode) + (state == null ? 0 : state!.hashCode) + (takenAfter == null ? 0 : takenAfter!.hashCode) + (takenBefore == null ? 0 : takenBefore!.hashCode) + (trashedAfter == null ? 0 : trashedAfter!.hashCode) + (trashedBefore == null ? 0 : trashedBefore!.hashCode) + (type == null ? 0 : type!.hashCode) + (updatedAfter == null ? 0 : updatedAfter!.hashCode) + (updatedBefore == null ? 0 : updatedBefore!.hashCode) + (webpPath == null ? 0 : webpPath!.hashCode) + (withArchived.hashCode) + (withDeleted == null ? 0 : withDeleted!.hashCode) + (withExif == null ? 0 : withExif!.hashCode) + (withPeople == null ? 0 : withPeople!.hashCode) + (withStacked == null ? 0 : withStacked!.hashCode); @override String toString() => 'MetadataSearchDto[checksum=$checksum, city=$city, country=$country, createdAfter=$createdAfter, createdBefore=$createdBefore, deviceAssetId=$deviceAssetId, deviceId=$deviceId, encodedVideoPath=$encodedVideoPath, id=$id, isArchived=$isArchived, isEncoded=$isEncoded, isExternal=$isExternal, isFavorite=$isFavorite, isMotion=$isMotion, isNotInAlbum=$isNotInAlbum, isOffline=$isOffline, isReadOnly=$isReadOnly, isVisible=$isVisible, lensModel=$lensModel, libraryId=$libraryId, make=$make, model=$model, order=$order, originalFileName=$originalFileName, originalPath=$originalPath, page=$page, personIds=$personIds, resizePath=$resizePath, size=$size, state=$state, takenAfter=$takenAfter, takenBefore=$takenBefore, trashedAfter=$trashedAfter, trashedBefore=$trashedBefore, type=$type, updatedAfter=$updatedAfter, updatedBefore=$updatedBefore, webpPath=$webpPath, withArchived=$withArchived, withDeleted=$withDeleted, withExif=$withExif, withPeople=$withPeople, withStacked=$withStacked]'; Map toJson() { final json = {}; if (this.checksum != null) { json[r'checksum'] = this.checksum; } else { // json[r'checksum'] = null; } if (this.city != null) { json[r'city'] = this.city; } else { // json[r'city'] = null; } if (this.country != null) { json[r'country'] = this.country; } else { // json[r'country'] = null; } if (this.createdAfter != null) { json[r'createdAfter'] = this.createdAfter!.toUtc().toIso8601String(); } else { // json[r'createdAfter'] = null; } if (this.createdBefore != null) { json[r'createdBefore'] = this.createdBefore!.toUtc().toIso8601String(); } else { // json[r'createdBefore'] = null; } if (this.deviceAssetId != null) { json[r'deviceAssetId'] = this.deviceAssetId; } else { // json[r'deviceAssetId'] = null; } if (this.deviceId != null) { json[r'deviceId'] = this.deviceId; } else { // json[r'deviceId'] = null; } if (this.encodedVideoPath != null) { json[r'encodedVideoPath'] = this.encodedVideoPath; } else { // json[r'encodedVideoPath'] = null; } if (this.id != null) { json[r'id'] = this.id; } else { // json[r'id'] = null; } if (this.isArchived != null) { json[r'isArchived'] = this.isArchived; } else { // json[r'isArchived'] = null; } if (this.isEncoded != null) { json[r'isEncoded'] = this.isEncoded; } else { // json[r'isEncoded'] = null; } if (this.isExternal != null) { json[r'isExternal'] = this.isExternal; } else { // json[r'isExternal'] = null; } if (this.isFavorite != null) { json[r'isFavorite'] = this.isFavorite; } else { // json[r'isFavorite'] = null; } if (this.isMotion != null) { json[r'isMotion'] = this.isMotion; } else { // json[r'isMotion'] = null; } if (this.isNotInAlbum != null) { json[r'isNotInAlbum'] = this.isNotInAlbum; } else { // json[r'isNotInAlbum'] = null; } if (this.isOffline != null) { json[r'isOffline'] = this.isOffline; } else { // json[r'isOffline'] = null; } if (this.isReadOnly != null) { json[r'isReadOnly'] = this.isReadOnly; } else { // json[r'isReadOnly'] = null; } if (this.isVisible != null) { json[r'isVisible'] = this.isVisible; } else { // json[r'isVisible'] = null; } if (this.lensModel != null) { json[r'lensModel'] = this.lensModel; } else { // json[r'lensModel'] = null; } if (this.libraryId != null) { json[r'libraryId'] = this.libraryId; } else { // json[r'libraryId'] = null; } if (this.make != null) { json[r'make'] = this.make; } else { // json[r'make'] = null; } if (this.model != null) { json[r'model'] = this.model; } else { // json[r'model'] = null; } if (this.order != null) { json[r'order'] = this.order; } else { // json[r'order'] = null; } if (this.originalFileName != null) { json[r'originalFileName'] = this.originalFileName; } else { // json[r'originalFileName'] = null; } if (this.originalPath != null) { json[r'originalPath'] = this.originalPath; } else { // json[r'originalPath'] = null; } if (this.page != null) { json[r'page'] = this.page; } else { // json[r'page'] = null; } json[r'personIds'] = this.personIds; if (this.resizePath != null) { json[r'resizePath'] = this.resizePath; } else { // json[r'resizePath'] = null; } if (this.size != null) { json[r'size'] = this.size; } else { // json[r'size'] = null; } if (this.state != null) { json[r'state'] = this.state; } else { // json[r'state'] = null; } if (this.takenAfter != null) { json[r'takenAfter'] = this.takenAfter!.toUtc().toIso8601String(); } else { // json[r'takenAfter'] = null; } if (this.takenBefore != null) { json[r'takenBefore'] = this.takenBefore!.toUtc().toIso8601String(); } else { // json[r'takenBefore'] = null; } if (this.trashedAfter != null) { json[r'trashedAfter'] = this.trashedAfter!.toUtc().toIso8601String(); } else { // json[r'trashedAfter'] = null; } if (this.trashedBefore != null) { json[r'trashedBefore'] = this.trashedBefore!.toUtc().toIso8601String(); } else { // json[r'trashedBefore'] = null; } if (this.type != null) { json[r'type'] = this.type; } else { // json[r'type'] = null; } if (this.updatedAfter != null) { json[r'updatedAfter'] = this.updatedAfter!.toUtc().toIso8601String(); } else { // json[r'updatedAfter'] = null; } if (this.updatedBefore != null) { json[r'updatedBefore'] = this.updatedBefore!.toUtc().toIso8601String(); } else { // json[r'updatedBefore'] = null; } if (this.webpPath != null) { json[r'webpPath'] = this.webpPath; } else { // json[r'webpPath'] = null; } json[r'withArchived'] = this.withArchived; if (this.withDeleted != null) { json[r'withDeleted'] = this.withDeleted; } else { // json[r'withDeleted'] = null; } if (this.withExif != null) { json[r'withExif'] = this.withExif; } else { // json[r'withExif'] = null; } if (this.withPeople != null) { json[r'withPeople'] = this.withPeople; } else { // json[r'withPeople'] = null; } if (this.withStacked != null) { json[r'withStacked'] = this.withStacked; } else { // json[r'withStacked'] = null; } return json; } /// Returns a new [MetadataSearchDto] instance and imports its values from /// [value] if it's a [Map], null otherwise. // ignore: prefer_constructors_over_static_methods static MetadataSearchDto? fromJson(dynamic value) { if (value is Map) { final json = value.cast(); return MetadataSearchDto( checksum: mapValueOfType(json, r'checksum'), city: mapValueOfType(json, r'city'), country: mapValueOfType(json, r'country'), createdAfter: mapDateTime(json, r'createdAfter', r''), createdBefore: mapDateTime(json, r'createdBefore', r''), deviceAssetId: mapValueOfType(json, r'deviceAssetId'), deviceId: mapValueOfType(json, r'deviceId'), encodedVideoPath: mapValueOfType(json, r'encodedVideoPath'), id: mapValueOfType(json, r'id'), isArchived: mapValueOfType(json, r'isArchived'), isEncoded: mapValueOfType(json, r'isEncoded'), isExternal: mapValueOfType(json, r'isExternal'), isFavorite: mapValueOfType(json, r'isFavorite'), isMotion: mapValueOfType(json, r'isMotion'), isNotInAlbum: mapValueOfType(json, r'isNotInAlbum'), isOffline: mapValueOfType(json, r'isOffline'), isReadOnly: mapValueOfType(json, r'isReadOnly'), isVisible: mapValueOfType(json, r'isVisible'), lensModel: mapValueOfType(json, r'lensModel'), libraryId: mapValueOfType(json, r'libraryId'), make: mapValueOfType(json, r'make'), model: mapValueOfType(json, r'model'), order: AssetOrder.fromJson(json[r'order']), originalFileName: mapValueOfType(json, r'originalFileName'), originalPath: mapValueOfType(json, r'originalPath'), page: num.parse('${json[r'page']}'), personIds: json[r'personIds'] is Iterable ? (json[r'personIds'] as Iterable).cast().toList(growable: false) : const [], resizePath: mapValueOfType(json, r'resizePath'), size: num.parse('${json[r'size']}'), state: mapValueOfType(json, r'state'), takenAfter: mapDateTime(json, r'takenAfter', r''), takenBefore: mapDateTime(json, r'takenBefore', r''), trashedAfter: mapDateTime(json, r'trashedAfter', r''), trashedBefore: mapDateTime(json, r'trashedBefore', r''), type: AssetTypeEnum.fromJson(json[r'type']), updatedAfter: mapDateTime(json, r'updatedAfter', r''), updatedBefore: mapDateTime(json, r'updatedBefore', r''), webpPath: mapValueOfType(json, r'webpPath'), withArchived: mapValueOfType(json, r'withArchived') ?? false, withDeleted: mapValueOfType(json, r'withDeleted'), withExif: mapValueOfType(json, r'withExif'), withPeople: mapValueOfType(json, r'withPeople'), withStacked: mapValueOfType(json, r'withStacked'), ); } return null; } static List listFromJson(dynamic json, {bool growable = false,}) { final result = []; if (json is List && json.isNotEmpty) { for (final row in json) { final value = MetadataSearchDto.fromJson(row); if (value != null) { result.add(value); } } } return result.toList(growable: growable); } static Map mapFromJson(dynamic json) { final map = {}; if (json is Map && json.isNotEmpty) { json = json.cast(); // ignore: parameter_assignments for (final entry in json.entries) { final value = MetadataSearchDto.fromJson(entry.value); if (value != null) { map[entry.key] = value; } } } return map; } // maps a json object with a list of MetadataSearchDto-objects as value to a dart map static Map> mapListFromJson(dynamic json, {bool growable = false,}) { final map = >{}; if (json is Map && json.isNotEmpty) { // ignore: parameter_assignments json = json.cast(); for (final entry in json.entries) { map[entry.key] = MetadataSearchDto.listFromJson(entry.value, growable: growable,); } } return map; } /// The list of required keys that must be present in a JSON. static const requiredKeys = { }; }