decodeMapTyped<T extends Map<String, V>?, V> function

T decodeMapTyped<T extends Map<String, V>?, V>(
  1. dynamic raw
)

Implementation

T decodeMapTyped<T extends Map<String, V>?, V>(dynamic raw) {
  if (raw is T) {
    return raw;
  } else if (raw is Map<String, dynamic>) {
    final codec = TransferCodec.find<V>();
    return raw.map(
            (key, value) => MapEntry(key, decodeTyped<V>(value, codec: codec)))
        as T;
  } else if (TypeCheck<T>().isNullable && raw == null) {
    return null as T;
  } else if (raw is Map && raw.isEmpty) {
    return <String, V>{} as T;
  } else {
    throw CodecException.typeMismatch(T, raw.runtimeType);
  }
}