deserializeValue<T> function
T
deserializeValue<T>(
- dynamic value
Basic deserialization function. Handles:
Implementation
T deserializeValue<T>(dynamic value) {
if (!(kSupportedPrimitiveTypes.contains(value.runtimeType) || //
(value is List || value is Map || value is Set) //
)) {
throw ArgumentError.value(
value.runtimeType,
'type',
'Unsupported input type for deserialization: ${value.runtimeType}',
);
}
if (value is T) {
return value;
}
if (T == Null || value == null) {
return null as T;
} else {
// deserialize nullables
if (isNullable<T>()) {
if (isNullableSelf<int, T>()) {
return int.tryParse(value) as T;
} else if (isNullableSelf<double, T>()) {
return double.tryParse(value) as T;
} else if (isNullableSelf<String, T>()) {
return value.toString() as T;
} else if (isNullableSelf<bool, T>()) {
return bool.tryParse(value) as T;
}
}
// deserialize non-nullables
else {
if (T == int) {
return int.parse(value) as T;
} else if (T == double) {
return double.parse(value) as T;
} else if (T == String) {
return value.toString() as T;
} else if (T == bool) {
return bool.parse(value) as T;
} else if (T == List) {
return (value as List).map(_fallbackDeserializeValue).toList() as T;
} else if (T == Map) {
return (value as Map).map((k, v) => MapEntry(_fallbackDeserializeValue(k)!, _fallbackDeserializeValue(v))) as T;
}
}
}
throw ArgumentError.value(
value,
'value',
'Cannot deserialize value of type ${value.runtimeType} to type $T',
);
}