getDiscriminatedUnionCodec function
Returns a codec for encoding and decoding discriminated unions.
A discriminated union is a representation of Rust-like enums, where each
variant is distinguished by a discriminator field (default: '__kind').
variants is a list of (discriminatorValue, codec) pairs.
Implementation
Codec<Map<String, Object?>, Map<String, Object?>> getDiscriminatedUnionCodec(
List<(Object?, Codec<Object?, Object?>)> variants, {
String discriminator = '__kind',
Codec<num, num>? size,
}) {
return combineCodec(
getDiscriminatedUnionEncoder(
variants.map((e) => (e.$1, encoderFromCodec(e.$2))).toList(),
discriminator: discriminator,
size: size != null ? encoderFromCodec(size) : null,
),
getDiscriminatedUnionDecoder(
variants.map((e) => (e.$1, decoderFromCodec(e.$2))).toList(),
discriminator: discriminator,
size: size != null ? decoderFromCodec(size) : null,
),
);
}