/** * This code was AUTOGENERATED using the codama library. * Please DO NOT EDIT THIS FILE, instead use visitors * to add features, then rerun codama to update it. * * @see https://github.com/codama-idl/codama */ import { combineCodec, getStructDecoder, getStructEncoder, getU8Decoder, getU8Encoder, transformEncoder, type Address, type Codec, type Decoder, type Encoder, type IAccountMeta, type IInstruction, type IInstructionWithAccounts, type IInstructionWithData, type WritableAccount, } from '@solana/web3.js'; import { TOKEN_PROGRAM_ADDRESS } from '../programs'; import { getAccountMetaFactory, type ResolvedAccount } from '../shared'; export const SYNC_NATIVE_DISCRIMINATOR = 17; export function getSyncNativeDiscriminatorBytes() { return getU8Encoder().encode(SYNC_NATIVE_DISCRIMINATOR); } export type SyncNativeInstruction< TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, TAccountAccount extends string | IAccountMeta = string, TRemainingAccounts extends readonly IAccountMeta[] = [], > = IInstruction & IInstructionWithData & IInstructionWithAccounts< [ TAccountAccount extends string ? WritableAccount : TAccountAccount, ...TRemainingAccounts, ] >; export type SyncNativeInstructionData = { discriminator: number }; export type SyncNativeInstructionDataArgs = {}; export function getSyncNativeInstructionDataEncoder(): Encoder { return transformEncoder( getStructEncoder([['discriminator', getU8Encoder()]]), (value) => ({ ...value, discriminator: SYNC_NATIVE_DISCRIMINATOR }) ); } export function getSyncNativeInstructionDataDecoder(): Decoder { return getStructDecoder([['discriminator', getU8Decoder()]]); } export function getSyncNativeInstructionDataCodec(): Codec< SyncNativeInstructionDataArgs, SyncNativeInstructionData > { return combineCodec( getSyncNativeInstructionDataEncoder(), getSyncNativeInstructionDataDecoder() ); } export type SyncNativeInput = { /** The native token account to sync with its underlying lamports. */ account: Address; }; export function getSyncNativeInstruction< TAccountAccount extends string, TProgramAddress extends Address = typeof TOKEN_PROGRAM_ADDRESS, >( input: SyncNativeInput, config?: { programAddress?: TProgramAddress } ): SyncNativeInstruction { // Program address. const programAddress = config?.programAddress ?? TOKEN_PROGRAM_ADDRESS; // Original accounts. const originalAccounts = { account: { value: input.account ?? null, isWritable: true }, }; const accounts = originalAccounts as Record< keyof typeof originalAccounts, ResolvedAccount >; const getAccountMeta = getAccountMetaFactory(programAddress, 'programId'); const instruction = { accounts: [getAccountMeta(accounts.account)], programAddress, data: getSyncNativeInstructionDataEncoder().encode({}), } as SyncNativeInstruction; return instruction; } export type ParsedSyncNativeInstruction< TProgram extends string = typeof TOKEN_PROGRAM_ADDRESS, TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[], > = { programAddress: Address; accounts: { /** The native token account to sync with its underlying lamports. */ account: TAccountMetas[0]; }; data: SyncNativeInstructionData; }; export function parseSyncNativeInstruction< TProgram extends string, TAccountMetas extends readonly IAccountMeta[], >( instruction: IInstruction & IInstructionWithAccounts & IInstructionWithData ): ParsedSyncNativeInstruction { if (instruction.accounts.length < 1) { // TODO: Coded error. throw new Error('Not enough accounts'); } let accountIndex = 0; const getNextAccount = () => { const accountMeta = instruction.accounts![accountIndex]!; accountIndex += 1; return accountMeta; }; return { programAddress: instruction.programAddress, accounts: { account: getNextAccount(), }, data: getSyncNativeInstructionDataDecoder().decode(instruction.data), }; }