resolveValueByType static method
Object?
resolveValueByType(
- TypeInfo typeInfo,
- Object? value, {
- EntityCache? entityCache,
- 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;
}