{"version":3,"file":"Serializer.cjs","sources":["../../../src/types/Serializer.ts"],"sourcesContent":["import type { Beet } from '@convergence-rfq/beet';\nimport * as beet from '@convergence-rfq/beet';\nimport {\n  FailedToDeserializeDataError,\n  FailedToSerializeDataError,\n  UnexpectedAccountError,\n} from '../errors';\nimport {\n  Account,\n  MaybeAccount,\n  UnparsedAccount,\n  UnparsedMaybeAccount,\n} from './Account';\n\nexport type Serializer<T> = {\n  description: string;\n  serialize: (value: T) => Buffer;\n  deserialize: (buffer: Buffer, offset?: number) => [T, number];\n};\n\nexport const mapSerializer = <T, U>(\n  serializer: Serializer<T>,\n  map: (value: T) => U,\n  unmap: (value: U) => T\n): Serializer<U> => ({\n  description: serializer.description,\n  serialize: (value) => serializer.serialize(unmap(value)),\n  deserialize: (buffer, offset) => {\n    const [value, newOffset] = serializer.deserialize(buffer, offset);\n    return [map(value), newOffset];\n  },\n});\n\nexport const createSerializerFromBeet = <T>(\n  beetArg: Beet<T, unknown>\n): Serializer<T> => ({\n  description: beetArg.description,\n  serialize: (value: T) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromValue(value)\n      : beetArg;\n    const writer = new beet.BeetWriter(fixedBeet.byteSize);\n    writer.write(fixedBeet, value);\n    return writer.buffer;\n  },\n  deserialize: (buffer: Buffer, offset?: number) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromData(buffer, offset ?? 0)\n      : beetArg;\n    const reader = new beet.BeetReader(buffer, offset ?? 0);\n    const value = reader.read(fixedBeet);\n    return [value, reader.offset];\n  },\n});\n\n\nexport const createSerializerFromFixedSizeBeet = <T>(\n  beetArg: beet.FixedSizeBeet<T, T>\n): Serializer<T> => ({\n  description: beetArg.description,\n  serialize: (value: T) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromValue(value)\n      : beetArg;\n    const writer = new beet.BeetWriter(fixedBeet.byteSize);\n    writer.write(fixedBeet, value);\n    return writer.buffer;\n  },\n  deserialize: (buffer: Buffer, offset?: number) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromData(buffer, offset ?? 0)\n      : beetArg;\n    const reader = new beet.BeetReader(buffer, offset ?? 0);\n    const value = reader.read(fixedBeet);\n    return [value, reader.offset];\n  },\n});\n\n\n\nexport const createSerializerFromFixableBeet = <T>(\n  beetArg: beet.FixableBeet<T, Partial<T>>\n): Serializer<T> => ({\n  description: beetArg.description,\n  serialize: (value: T) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromValue(value)\n      : beetArg;\n    const writer = new beet.BeetWriter(fixedBeet.byteSize);\n    writer.write(fixedBeet, value);\n    return writer.buffer;\n  },\n  deserialize: (buffer: Buffer, offset?: number) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromData(buffer, offset ?? 0)\n      : beetArg;\n    const reader = new beet.BeetReader(buffer, offset ?? 0);\n    const value = reader.read(fixedBeet);\n    return [value, reader.offset];\n  },\n});\n\nexport const createSerializerFromFixableBeetArgsStruct = <T>(\n  beetArg: beet.FixableBeetArgsStruct<T>\n): Serializer<T> => ({\n  description: beetArg.description,\n  serialize: (value: T) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromValue(value)\n      : beetArg;\n    const writer = new beet.BeetWriter(fixedBeet.byteSize);\n    writer.write(fixedBeet, value);\n    return writer.buffer;\n  },\n  deserialize: (buffer: Buffer, offset?: number) => {\n    const fixedBeet = beet.isFixableBeet(beetArg)\n      ? beetArg.toFixedFromData(buffer, offset ?? 0)\n      : beetArg;\n    const reader = new beet.BeetReader(buffer, offset ?? 0);\n    const value = reader.read(fixedBeet);\n    return [value, reader.offset];\n  },\n});\n\nexport type SolitaType<T> = {\n  name: string;\n  deserialize: (data: Buffer, offset?: number) => [T, number];\n  fromArgs: (args: T) => {\n    serialize: () => [Buffer, number];\n  };\n};\n\nexport const createSerializerFromSolitaType = <T>(\n  solitaType: SolitaType<T>,\n  description?: string\n): Serializer<T> => ({\n  description: description ?? solitaType.name,\n  serialize: (value: T) => {\n    return solitaType.fromArgs(value).serialize()[0];\n  },\n  deserialize: (buffer: Buffer, offset?: number) => {\n    return solitaType.deserialize(buffer, offset);\n  },\n});\n\nexport const serialize = <T>(\n  value: T,\n  serializer: Pick<Serializer<T>, 'description' | 'serialize'>\n): Buffer => {\n  try {\n    return serializer.serialize(value);\n  } catch (error) {\n    throw new FailedToSerializeDataError(serializer.description, {\n      cause: error as Error,\n    });\n  }\n};\n\nexport const deserialize = <T>(\n  value: Buffer,\n  serializer: Pick<Serializer<T>, 'description' | 'deserialize'>\n): [T, number] => {\n  try {\n    return serializer.deserialize(value);\n  } catch (error) {\n    throw new FailedToDeserializeDataError(serializer.description, {\n      cause: error as Error,\n    });\n  }\n};\n\nexport function deserializeAccount<T>(\n  account: UnparsedMaybeAccount,\n  serializer: Pick<Serializer<T>, 'description' | 'deserialize'>\n): MaybeAccount<T>;\nexport function deserializeAccount<T>(\n  account: UnparsedAccount,\n  serializer: Pick<Serializer<T>, 'description' | 'deserialize'>\n): Account<T>;\nexport function deserializeAccount<T>(\n  account: UnparsedAccount | UnparsedMaybeAccount,\n  serializer: Pick<Serializer<T>, 'description' | 'deserialize'>\n): Account<T> | MaybeAccount<T> {\n  if ('exists' in account && !account.exists) {\n    return account;\n  }\n\n  try {\n    const data: T = serializer.deserialize(account.data)[0];\n    return { ...account, data };\n  } catch (error) {\n    throw new UnexpectedAccountError(\n      account.publicKey,\n      serializer.description,\n      { cause: error as Error }\n    );\n  }\n}\n\nexport const serializeDiscriminator = (discriminator: number[]): Buffer => {\n  const serializer = createSerializerFromBeet(\n    beet.uniformFixedSizeArray(beet.u8, 8)\n  );\n  return serialize(discriminator, serializer);\n};\n"],"names":["mapSerializer","serializer","map","unmap","description","serialize","value","deserialize","buffer","offset","_serializer$deseriali","_serializer$deseriali2","_slicedToArray","newOffset","createSerializerFromBeet","beetArg","fixedBeet","beet","isFixableBeet","toFixedFromValue","writer","BeetWriter","byteSize","write","toFixedFromData","reader","BeetReader","read","createSerializerFromFixedSizeBeet","createSerializerFromFixableBeet","createSerializerFromFixableBeetArgsStruct","createSerializerFromSolitaType","solitaType","name","fromArgs","error","FailedToSerializeDataError","cause","FailedToDeserializeDataError","deserializeAccount","account","exists","data","_objectSpread","UnexpectedAccountError","publicKey","serializeDiscriminator","discriminator","uniformFixedSizeArray","u8"],"mappings":"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"}