getDiscriminatedUnionCodec function

Codec<Map<String, Object?>, Map<String, Object?>> getDiscriminatedUnionCodec(
  1. List<(Object?, Codec<Object?, Object?>)> variants, {
  2. String discriminator = '__kind',
  3. Codec<num, num>? size,
})

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,
    ),
  );
}