getLiteralUnionEncoder function

Encoder<Object?> getLiteralUnionEncoder(
  1. List<Object?> variants, {
  2. Encoder<num>? size,
})

Returns an encoder for literal unions.

This encoder serializes a value from a predefined set of variants as a numerical index representing its position in the list.

Implementation

Encoder<Object?> getLiteralUnionEncoder(
  List<Object?> variants, {
  Encoder<num>? size,
}) {
  final discriminator = size ?? getU8Encoder();
  return transformEncoder<num, Object?>(discriminator, (variant) {
    final index = variants.indexOf(variant);
    if (index < 0) {
      throw SolanaError(SolanaErrorCode.codecsInvalidLiteralUnionVariant, {
        'value': variant,
        'variants': variants,
      });
    }
    return index;
  });
}