getLiteralUnionDecoder function

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

Returns a decoder for literal unions.

This decoder deserializes a numerical index into a corresponding value from a predefined set of variants.

Implementation

Decoder<Object?> getLiteralUnionDecoder(
  List<Object?> variants, {
  Decoder<num>? size,
}) {
  final discriminator = size ?? getU8Decoder();
  return transformDecoder<num, Object?>(discriminator, (index, bytes, offset) {
    final i = index.toInt();
    if (i < 0 || i >= variants.length) {
      throw SolanaError(
        SolanaErrorCode.codecsLiteralUnionDiscriminatorOutOfRange,
        {
          'discriminator': index,
          'maxRange': variants.length - 1,
          'minRange': 0,
        },
      );
    }
    return variants[i];
  });
}