getLiteralUnionDecoder function
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];
});
}