getMapCodec<K, V> function
Codec<Map<K, V> , Map<K, V> >
getMapCodec<K, V>(
- Codec<
K, K> key, - Codec<
V, V> value, { - ArrayLikeCodecSize? size,
Returns a codec for encoding and decoding maps.
This codec serializes maps where the key/value pairs are encoded
and decoded using the provided key and value codecs. Defaults to
a u32 size prefix.
Implementation
Codec<Map<K, V>, Map<K, V>> getMapCodec<K, V>(
Codec<K, K> key,
Codec<V, V> value, {
ArrayLikeCodecSize? size,
}) {
// Split size config for encoder/decoder.
final ArrayLikeCodecSize? encoderSize;
final ArrayLikeCodecSize? decoderSize;
if (size is PrefixedArraySize) {
final prefix = size.prefix;
if (prefix is Codec<BigInt, BigInt>) {
// Wide integer prefixes use `BigInt`, which is not a `num` in Dart.
encoderSize = PrefixedArraySize(encoderFromCodec(prefix));
decoderSize = PrefixedArraySize(decoderFromCodec(prefix));
} else if (prefix is Codec<num, num>) {
encoderSize = PrefixedArraySize(encoderFromCodec(prefix));
decoderSize = PrefixedArraySize(decoderFromCodec(prefix));
} else {
encoderSize = size;
decoderSize = size;
}
} else {
encoderSize = size;
decoderSize = size;
}
return combineCodec(
getMapEncoder<K, V>(
encoderFromCodec(key),
encoderFromCodec(value),
size: encoderSize,
),
getMapDecoder<K, V>(
decoderFromCodec(key),
decoderFromCodec(value),
size: decoderSize,
),
);
}