deserializeValue<T> function

T? deserializeValue<T>(
  1. dynamic value
)

Basic deserialization function. Handles:

Implementation

T? deserializeValue<T>(dynamic value) {
  if (!(supportedPrimitiveTypes.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;
  } 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',
  );
}