@metaplex-foundation/umi-serializers-core
Version:
Core types and helpers for UMI serializers
44 lines (42 loc) • 1.36 kB
text/typescript
import { Serializer } from './common';
/**
* Converts a serializer A to a serializer B by mapping their values.
* @category Serializers
*/
export function mapSerializer<NewFrom, OldFrom, To extends NewFrom & OldFrom>(
serializer: Serializer<OldFrom, To>,
unmap: (value: NewFrom) => OldFrom
): Serializer<NewFrom, To>;
export function mapSerializer<
NewFrom,
OldFrom,
NewTo extends NewFrom = NewFrom,
OldTo extends OldFrom = OldFrom
>(
serializer: Serializer<OldFrom, OldTo>,
unmap: (value: NewFrom) => OldFrom,
map: (value: OldTo, buffer: Uint8Array, offset: number) => NewTo
): Serializer<NewFrom, NewTo>;
export function mapSerializer<
NewFrom,
OldFrom,
NewTo extends NewFrom = NewFrom,
OldTo extends OldFrom = OldFrom
>(
serializer: Serializer<OldFrom, OldTo>,
unmap: (value: NewFrom) => OldFrom,
map?: (value: OldTo, buffer: Uint8Array, offset: number) => NewTo
): Serializer<NewFrom, NewTo> {
return {
description: serializer.description,
fixedSize: serializer.fixedSize,
maxSize: serializer.maxSize,
serialize: (value: NewFrom) => serializer.serialize(unmap(value)),
deserialize: (buffer: Uint8Array, offset = 0) => {
const [value, length] = serializer.deserialize(buffer, offset);
return map
? [map(value, buffer, offset), length]
: [value as any, length];
},
};
}