BCS serializer deserializer Easy to use
class _AnyPublicKeySerializer implements BCSSerializer<AnyPublicKey> {
const _AnyPublicKeySerializer._();
@override
AnyPublicKey deserializeIn(Deserializer deserializer) {
final variant = deserializer.deserializeUleb128AsU32();
if (variant == AnyPublicKeyVariant.keyless._underline) {
final keyless = KeylessPublicKey.bcsSerializer.deserializeIn(
deserializer,
);
return AnyPublicKey(variant: AnyPublicKeyVariant.keyless, key: keyless);
} else if (variant == AnyPublicKeyVariant.ed25519._underline) {
final ed25519 = Ed25519PublicKey.bcsSerializer.deserializeIn(
deserializer,
);
return AnyPublicKey(variant: AnyPublicKeyVariant.ed25519, key: ed25519);
}
throw UnimplementedError();
}
@override
void serializeIn(Serializer serializer, AnyPublicKey value) {
serializer.serializeU32AsUleb128(value.variant._underline);
if (value.variant == AnyPublicKeyVariant.keyless) {
KeylessPublicKey.bcsSerializer.serializeIn(
serializer,
value.key as KeylessPublicKey,
);
} else if (value.variant == AnyPublicKeyVariant.ed25519) {
Ed25519PublicKey.bcsSerializer.serializeIn(
serializer,
value.key as Ed25519PublicKey,
);
} else {
throw UnimplementedError();
}
}
}