Kit
Functions

getDiscriminatedUnionDecoder

getDiscriminatedUnionDecoder<TVariants, TDiscriminatorProperty>(variants, config?): Decoder<GetDecoderTypeFromVariants<TVariants, TDiscriminatorProperty>>

Returns a decoder for discriminated unions.

This decoder deserializes objects that follow the discriminated union pattern by reading a numerical discriminator and mapping it to the corresponding variant.

Unlike getUnionDecoder, this decoder automatically inserts the discriminator property (default: __kind) into the decoded object.

For more details, see getDiscriminatedUnionCodec.

Type Parameters

Type ParameterDefault typeDescription
TVariants extends Variants<Decoder<any>>-The variants of the discriminated union.
TDiscriminatorProperty extends string"__kind"The property used as the discriminator.

Parameters

ParameterTypeDescription
variantsTVariantsThe variant decoders as [discriminator, decoder] pairs.
config?DiscriminatedUnionCodecConfig<TDiscriminatorProperty, NumberDecoder>Configuration options for decoding.

Returns

Decoder<GetDecoderTypeFromVariants<TVariants, TDiscriminatorProperty>>

A Decoder for decoding discriminated union objects.

Example

Decoding a discriminated union.

type Message =
  | { __kind: 'Quit' } // Empty variant.
  | { __kind: 'Write'; fields: [string] } // Tuple variant.
  | { __kind: 'Move'; x: number; y: number }; // Struct variant.
 
const messageDecoder = getDiscriminatedUnionDecoder([
  ['Quit', getUnitDecoder()],
  ['Write', getStructDecoder([['fields', getTupleDecoder([addCodecSizePrefix(getUtf8Decoder(), getU32Decoder())])]])],
  ['Move', getStructDecoder([['x', getI32Decoder()], ['y', getI32Decoder()]])]
]);
 
messageDecoder.decode(new Uint8Array([0x02,0x05,0x00,0x00,0x00,0x06,0x00,0x00,0x00]));
// { __kind: 'Move', x: 5, y: 6 }

See

getDiscriminatedUnionCodec

On this page