Kit
Functions

getDiscriminatedUnionEncoder

getDiscriminatedUnionEncoder<TVariants, TDiscriminatorProperty>(variants, config?): Encoder<GetEncoderTypeFromVariants<TVariants, TDiscriminatorProperty>>

Returns an encoder for discriminated unions.

This encoder serializes objects that follow the discriminated union pattern by prefixing them with a numerical discriminator that represents their variant.

Unlike getUnionEncoder, this encoder automatically extracts and processes the discriminator property (default: __kind) from each variant.

For more details, see getDiscriminatedUnionCodec.

Type Parameters

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

Parameters

ParameterTypeDescription
variantsTVariantsThe variant encoders as [discriminator, encoder] pairs.
config?DiscriminatedUnionCodecConfig<TDiscriminatorProperty, NumberEncoder>Configuration options for encoding.

Returns

Encoder<GetEncoderTypeFromVariants<TVariants, TDiscriminatorProperty>>

An Encoder for encoding discriminated union objects.

Example

Encoding a discriminated union.

type Message =
  | { __kind: 'Quit' } // Empty variant.
  | { __kind: 'Write'; fields: [string] } // Tuple variant.
  | { __kind: 'Move'; x: number; y: number }; // Struct variant.
 
const messageEncoder = getDiscriminatedUnionEncoder([
  ['Quit', getUnitEncoder()],
  ['Write', getStructEncoder([['fields', getTupleEncoder([addCodecSizePrefix(getUtf8Encoder(), getU32Encoder())])]])],
  ['Move', getStructEncoder([['x', getI32Encoder()], ['y', getI32Encoder()]])]
]);
 
messageEncoder.encode({ __kind: 'Move', x: 5, y: 6 });
// 0x020500000006000000
//   | |       └── Field y (6)
//   | └── Field x (5)
//   └── 1-byte discriminator (Index 2 — the "Move" variant)

See

getDiscriminatedUnionCodec

On this page