resolveValueByType static method

Object? resolveValueByType(
  1. TypeInfo typeInfo,
  2. Object? value, {
  3. EntityCache? entityCache,
  4. EntityResolutionRules? resolutionRules,
})

Implementation

static Object? resolveValueByType(TypeInfo typeInfo, Object? value,
    {EntityCache? entityCache, EntityResolutionRules? resolutionRules}) {
  if (value == null) {
    return null;
  } else if (typeInfo.type == value.runtimeType && !typeInfo.hasArguments) {
    return value;
  } else if (typeInfo.isNumber) {
    var n = typeInfo.parse(value);
    return n;
  } else if (typeInfo.isString) {
    var s = typeInfo.parse(value);
    return s;
  } else if (typeInfo.equalsType(_typeInfoDecimal)) {
    return Decimal.from(value);
  } else if (typeInfo.equalsType(_typeInfoDynamicInt)) {
    return DynamicInt.from(value);
  } else if (typeInfo.equalsType(_typeInfoDynamicNumber)) {
    return DynamicNumber.from(value);
  } else if (typeInfo.equalsType(_typeInfoTime)) {
    return Time.from(value);
  } else if (typeInfo.isUInt8List) {
    var bytes = _resolveRequestParameterValueAsBytes(value);
    return bytes;
  } else if (typeInfo.isList) {
    if (value is! List) {
      value = TypeParser.parseList(value) ?? value;
    }

    var arg0 = typeInfo.arguments0;
    if (value is List && arg0 != null && arg0.isPrimitiveType) {
      var argParser = TypeParser.parserForTypeInfo(arg0);
      if (argParser != null && !typeInfo.isCastedList(value)) {
        value =
            TypeParser.parseList(value, elementParser: argParser) ?? value;
      }

      return typeInfo.castList(value);
    }
  } else if (typeInfo.isSet) {
    var arg0 = typeInfo.arguments0;

    if (value is! Set) {
      if (arg0 != null) {
        var s = _resolveValueSetTypeAsListType(
            arg0, value, entityCache, resolutionRules);
        if (s != null) return s;
      } else {
        value = TypeParser.parseSet(value) ?? value;
      }
    }

    if (value is Set && arg0 != null && arg0.isPrimitiveType) {
      var argParser = TypeParser.parserForTypeInfo(arg0);
      if (argParser != null && !typeInfo.isCastedSet(value)) {
        value = TypeParser.parseSet(value, elementParser: argParser) ?? value;
      }

      return typeInfo.castSet(value);
    } else if (arg0 != null) {
      var s = _resolveValueSetTypeAsListType(
          arg0, value, entityCache, resolutionRules);
      if (s != null) return s;
    }
  } else if (typeInfo.isMap) {
    var arg0 = typeInfo.arguments0;
    var arg1 = typeInfo.arguments1;

    if (value is! Map) {
      value = TypeParser.parseMap(value);
    }

    if (value is Map &&
        arg0 != null &&
        arg1 != null &&
        arg0.isPrimitiveType &&
        arg1.isPrimitiveType) {
      var argParser0 = TypeParser.parserForTypeInfo(arg0);
      var argParser1 = TypeParser.parserForTypeInfo(arg1);

      if ((argParser0 != null || argParser1 != null) &&
          !typeInfo.isCastedMap(value)) {
        Map? m = typeInfo.callCastedArgumentsAB(<K, V>() {
          return TypeParser.parseMap<K, V>(
            value,
            keyParser: argParser0 is TypeElementParser<K> ? argParser0 : null,
            valueParser:
                argParser1 is TypeElementParser<V> ? argParser1 : null,
          );
        });

        value = m ?? value;
      }

      return typeInfo.castMap(value);
    }
  }

  if (!typeInfo.isPrimitiveType) {
    var o = _resolveValueAsEntity(typeInfo, value,
        entityCache: entityCache, resolutionRules: resolutionRules);
    if (o != null) return o;
  }

  var parsed = typeInfo.parse(value);
  return parsed ?? value;
}