fromJson static method

dynamic fromJson(
  1. dynamic value,
  2. String targetType, {
  3. bool growable = false,
})

Returns a native instance of an OpenAPI class matching the targetType.

Implementation

static dynamic fromJson(
  dynamic value,
  String targetType, {
  bool growable = false,
}) {
  try {
    switch (targetType) {
      case 'String':
        return value is String ? value : value.toString();
      case 'int':
        return value is int ? value : int.parse('$value');
      case 'double':
        return value is double ? value : double.parse('$value');
      case 'bool':
        if (value is bool) {
          return value;
        }
        final valueString = '$value'.toLowerCase();
        return valueString == 'true' || valueString == '1';
      case 'DateTime':
        return value is DateTime ? value : DateTime.tryParse(value);
      case 'AccessLevel':
        return AccessLevelTypeAssetsTransformer().decode(value);
      case 'Device':
        return Device.fromJson(value);
      case 'DeviceModel':
        return DeviceModel.fromJson(value);
      case 'DeviceModelMetricItemRequest':
        return DeviceModelMetricItemRequest.fromJson(value);
      case 'DeviceModelMetricItemResponse':
        return DeviceModelMetricItemResponse.fromJson(value);
      case 'DeviceModelRequestBodyData':
        return DeviceModelRequestBodyData.fromJson(value);
      case 'DeviceRequestBody':
        return DeviceRequestBody.fromJson(value);
      case 'RequestConnectDisconnectBody':
        return RequestConnectDisconnectBody.fromJson(value);
      case 'RequestConnectDisconnectBodyData':
        return RequestConnectDisconnectBodyData.fromJson(value);
      case 'Error':
        return Error.fromJson(value);
      case 'DeviceModelRequestBody':
        return DeviceModelRequestBody.fromJson(value);
      case 'DeviceRequestBodyData':
        return DeviceRequestBodyData.fromJson(value);
      case 'GatewayModelsRequestBody':
        return GatewayModelsRequestBody.fromJson(value);
      case 'GatewayAssignLicenseRequestBody':
        return GatewayAssignLicenseRequestBody.fromJson(value);
      case 'GatewayAssignLicenseRequestBodyData':
        return GatewayAssignLicenseRequestBodyData.fromJson(value);
      case 'GatewayDisconnectLicenseRequestBody':
        return GatewayDisconnectLicenseRequestBody.fromJson(value);
      case 'GatewayDisconnectLicenseRequestBodyData':
        return GatewayDisconnectLicenseRequestBodyData.fromJson(value);
      case 'GatewayRequestBody':
        return GatewayRequestBody.fromJson(value);
      case 'LicenseRegisterWithTokenRequestBody':
        return LicenseRegisterWithTokenRequestBody.fromJson(value);
      case 'ManufacturersRequestBody':
        return ManufacturersRequestBody.fromJson(value);
      case 'PlantPostRequestBody':
        return PlantPostRequestBody.fromJson(value);
      case 'AssetsTransformsRequestBody':
        return AssetsTransformsRequestBody.fromJson(value);
      case 'Gateway':
        return Gateway.fromJson(value);
      case 'GatewayModel':
        return GatewayModel.fromJson(value);
      case 'GatewayModelRequestBodyData':
        return GatewayModelRequestBodyData.fromJson(value);
      case 'GatewayRequestBodyData':
        return GatewayRequestBodyData.fromJson(value);
      case 'GatewayStatus':
        return GatewayStatus.fromJson(value);
      case 'AssetsGroup':
        return AssetsGroup.fromJson(value);
      case 'PlantBasic':
        return PlantBasic.fromJson(value);
      case 'LicenseGateway':
        return LicenseGateway.fromJson(value);
      case 'LicenseRequestAssignBody':
        return LicenseRequestAssignBody.fromJson(value);
      case 'License':
        return License.fromJson(value);
      case 'LogbotLink':
        return LogbotLink.fromJson(value);
      case 'Manufacturer':
        return Manufacturer.fromJson(value);
      case 'ManufacturerRequestBodyData':
        return ManufacturerRequestBodyData.fromJson(value);
      case 'MetricCategory':
        return MetricCategoryTypeAssetsTransformer().decode(value);
      case 'AssetsMetricModbusRTU':
        return AssetsMetricModbusRTU.fromJson(value);
      case 'AssetsMetricModbusRTUResponse':
        return AssetsMetricModbusRTUResponse.fromJson(value);
      case 'AssetsMetricModbusTCP':
        return AssetsMetricModbusTCP.fromJson(value);
      case 'AssetsMetricModbusTCPRequestBody':
        return AssetsMetricModbusTCPRequestBody.fromJson(value);
      case 'AssetsMetricModbusTCPResponse':
        return AssetsMetricModbusTCPResponse.fromJson(value);
      case 'AssetsMetricOPCUA':
        return AssetsMetricOPCUA.fromJson(value);
      case 'AssetsMetricOPCUARequestBody':
        return AssetsMetricOPCUARequestBody.fromJson(value);
      case 'AssetsMetricOPCUAResponse':
        return AssetsMetricOPCUAResponse.fromJson(value);
      case 'MetricPermission':
        return MetricPermissionTypeAssetsTransformer().decode(value);
      case 'AssetsMetricS7':
        return AssetsMetricS7.fromJson(value);
      case 'AssetsMetricS7RequestBody':
        return AssetsMetricS7RequestBody.fromJson(value);
      case 'AssetsMetricS7Response':
        return AssetsMetricS7Response.fromJson(value);
      case 'StaticTag':
        return StaticTag.fromJson(value);
      case 'Tags':
        return Tags.fromJson(value);
      case 'ModbusRTURequestBody':
        return ModbusRTURequestBody.fromJson(value);
      case 'Plant':
        return Plant.fromJson(value);
      case 'PlantRequestBodyData':
        return PlantRequestBodyData.fromJson(value);
      case 'AssetsProtocolEnum':
        return AssetsProtocolEnumTypeAssetsTransformer().decode(value);
      case 'RetPolicy':
        return RetPolicyTypeAssetsTransformer().decode(value);
      case 'SpecialUuid':
        return SpecialUuid.fromJson(value);
      case 'SupportedGateway':
        return SupportedGateway.fromJson(value);
      case 'SupportedGatewayRequestBody':
        return SupportedGatewayRequestBody.fromJson(value);
      case 'AssetsTransform':
        return AssetsTransform.fromJson(value);
      case 'AssetsTransformsRequestBodyData':
        return AssetsTransformsRequestBodyData.fromJson(value);
      case 'Unit':
        return UnitTypeAssetsTransformer().decode(value);
      default:
        dynamic match;
        if (value is List &&
            (match = _regList.firstMatch(targetType)?.group(1)) != null) {
          return value
              .map<dynamic>((dynamic v) => fromJson(
                    v,
                    match,
                    growable: growable,
                  ))
              .toList(growable: growable);
        }
        if (value is Set &&
            (match = _regSet.firstMatch(targetType)?.group(1)) != null) {
          return value
              .map<dynamic>((dynamic v) => fromJson(
                    v,
                    match,
                    growable: growable,
                  ))
              .toSet();
        }
        if (value is Map &&
            (match = _regMap.firstMatch(targetType)?.group(1)) != null) {
          return Map<String, dynamic>.fromIterables(
            value.keys.cast<String>(),
            value.values.map<dynamic>((dynamic v) => fromJson(
                  v,
                  match,
                  growable: growable,
                )),
          );
        }
    }
  } on Exception catch (error, trace) {
    throw ApiException.withInner(
      HttpStatus.internalServerError,
      'Exception during deserialization.',
      error,
      trace,
    );
  }
  throw ApiException(
    HttpStatus.internalServerError,
    'Could not find a suitable class for deserialization',
  );
}