UNPKG

@metaplex-foundation/umi-serializers-core

Version:

Core types and helpers for UMI serializers

1 lines 2.85 kB
{"version":3,"file":"fixSerializer.cjs","sources":["../../src/fixSerializer.ts"],"sourcesContent":["import { fixBytes } from './bytes';\nimport { Serializer } from './common';\nimport { NotEnoughBytesError } from './errors';\n\n/**\n * Creates a fixed-size serializer from a given serializer.\n *\n * @param serializer - The serializer to wrap into a fixed-size serializer.\n * @param fixedBytes - The fixed number of bytes to read.\n * @param description - A custom description for the serializer.\n *\n * @category Serializers\n */\nexport function fixSerializer<T, U extends T = T>(\n serializer: Serializer<T, U>,\n fixedBytes: number,\n description?: string\n): Serializer<T, U> {\n return {\n description:\n description ?? `fixed(${fixedBytes}, ${serializer.description})`,\n fixedSize: fixedBytes,\n maxSize: fixedBytes,\n serialize: (value: T) => fixBytes(serializer.serialize(value), fixedBytes),\n deserialize: (buffer: Uint8Array, offset = 0) => {\n // Slice the buffer to the fixed size.\n buffer = buffer.slice(offset, offset + fixedBytes);\n // Ensure we have enough bytes.\n if (buffer.length < fixedBytes) {\n throw new NotEnoughBytesError(\n 'fixSerializer',\n fixedBytes,\n buffer.length\n );\n }\n // If the nested serializer is fixed-size, pad and truncate the buffer accordingly.\n if (serializer.fixedSize !== null) {\n buffer = fixBytes(buffer, serializer.fixedSize);\n }\n // Deserialize the value using the nested serializer.\n const [value] = serializer.deserialize(buffer, 0);\n return [value, offset + fixedBytes];\n },\n };\n}\n"],"names":["fixSerializer","serializer","fixedBytes","description","fixedSize","maxSize","serialize","value","fixBytes","deserialize","buffer","offset","slice","length","NotEnoughBytesError"],"mappings":";;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,aAAa,CAC3BC,UAA4B,EAC5BC,UAAkB,EAClBC,WAAoB,EACF;EAClB,OAAO;IACLA,WAAW,EACTA,WAAW,IAAK,CAAA,MAAA,EAAQD,UAAW,CAAID,EAAAA,EAAAA,UAAU,CAACE,WAAY,CAAE,CAAA,CAAA;AAClEC,IAAAA,SAAS,EAAEF,UAAU;AACrBG,IAAAA,OAAO,EAAEH,UAAU;AACnBI,IAAAA,SAAS,EAAGC,KAAQ,IAAKC,cAAQ,CAACP,UAAU,CAACK,SAAS,CAACC,KAAK,CAAC,EAAEL,UAAU,CAAC;AAC1EO,IAAAA,WAAW,EAAE,CAACC,MAAkB,EAAEC,MAAM,GAAG,CAAC,KAAK;AAC/C;MACAD,MAAM,GAAGA,MAAM,CAACE,KAAK,CAACD,MAAM,EAAEA,MAAM,GAAGT,UAAU,CAAC,CAAA;AAClD;AACA,MAAA,IAAIQ,MAAM,CAACG,MAAM,GAAGX,UAAU,EAAE;QAC9B,MAAM,IAAIY,0BAAmB,CAC3B,eAAe,EACfZ,UAAU,EACVQ,MAAM,CAACG,MAAM,CACd,CAAA;AACH,OAAA;AACA;AACA,MAAA,IAAIZ,UAAU,CAACG,SAAS,KAAK,IAAI,EAAE;QACjCM,MAAM,GAAGF,cAAQ,CAACE,MAAM,EAAET,UAAU,CAACG,SAAS,CAAC,CAAA;AACjD,OAAA;AACA;MACA,MAAM,CAACG,KAAK,CAAC,GAAGN,UAAU,CAACQ,WAAW,CAACC,MAAM,EAAE,CAAC,CAAC,CAAA;AACjD,MAAA,OAAO,CAACH,KAAK,EAAEI,MAAM,GAAGT,UAAU,CAAC,CAAA;AACrC,KAAA;GACD,CAAA;AACH;;;;"}