/** * 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 { assertAccountExists, assertAccountsExist, combineCodec, decodeAccount, fetchEncodedAccount, fetchEncodedAccounts, fixDecoderSize, fixEncoderSize, getAddressDecoder, getAddressEncoder, getBytesDecoder, getBytesEncoder, getStructDecoder, getStructEncoder, getU64Decoder, getU64Encoder, getU8Decoder, getU8Encoder, transformEncoder, type Account, type Address, type Codec, type Decoder, type EncodedAccount, type Encoder, type FetchAccountConfig, type FetchAccountsConfig, type MaybeAccount, type MaybeEncodedAccount, type ReadonlyUint8Array, } from '@solana/kit'; import { CharacterSeeds, findCharacterPda } from '../pdas'; import { getCharacterAssetCountsDecoder, getCharacterAssetCountsEncoder, getCharacterModifiersDecoder, getCharacterModifiersEncoder, getCheckInStreakInfoDecoder, getCheckInStreakInfoEncoder, getPilotXpBudgetDecoder, getPilotXpBudgetEncoder, getXpInfoDecoder, getXpInfoEncoder, type CharacterAssetCounts, type CharacterAssetCountsArgs, type CharacterModifiers, type CharacterModifiersArgs, type CheckInStreakInfo, type CheckInStreakInfoArgs, type PilotXpBudget, type PilotXpBudgetArgs, type XpInfo, type XpInfoArgs, } from '../types'; export const CHARACTER_DISCRIMINATOR = new Uint8Array([ 140, 115, 165, 36, 241, 153, 102, 84, ]); export function getCharacterDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode(CHARACTER_DISCRIMINATOR); } /** A `SAGE` character. */ export type Character = { discriminator: ReadonlyUint8Array; version: number; playerProfile: Address; gameId: Address; bump: number; checkInInfo: CheckInStreakInfo; xpInfo: XpInfo; atlas: bigint; counts: CharacterAssetCounts; pilotXpBudget: PilotXpBudget; characterModifiers: CharacterModifiers; }; export type CharacterArgs = { version: number; playerProfile: Address; gameId: Address; bump: number; checkInInfo: CheckInStreakInfoArgs; xpInfo: XpInfoArgs; atlas: number | bigint; counts: CharacterAssetCountsArgs; pilotXpBudget: PilotXpBudgetArgs; characterModifiers: CharacterModifiersArgs; }; /** Gets the encoder for {@link CharacterArgs} account data. */ export function getCharacterEncoder(): Encoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['version', getU8Encoder()], ['playerProfile', getAddressEncoder()], ['gameId', getAddressEncoder()], ['bump', getU8Encoder()], ['checkInInfo', getCheckInStreakInfoEncoder()], ['xpInfo', getXpInfoEncoder()], ['atlas', getU64Encoder()], ['counts', getCharacterAssetCountsEncoder()], ['pilotXpBudget', getPilotXpBudgetEncoder()], ['characterModifiers', getCharacterModifiersEncoder()], ]), (value) => ({ ...value, discriminator: CHARACTER_DISCRIMINATOR }), ); } /** Gets the decoder for {@link Character} account data. */ export function getCharacterDecoder(): Decoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['version', getU8Decoder()], ['playerProfile', getAddressDecoder()], ['gameId', getAddressDecoder()], ['bump', getU8Decoder()], ['checkInInfo', getCheckInStreakInfoDecoder()], ['xpInfo', getXpInfoDecoder()], ['atlas', getU64Decoder()], ['counts', getCharacterAssetCountsDecoder()], ['pilotXpBudget', getPilotXpBudgetDecoder()], ['characterModifiers', getCharacterModifiersDecoder()], ]); } /** Gets the codec for {@link Character} account data. */ export function getCharacterCodec(): Codec { return combineCodec(getCharacterEncoder(), getCharacterDecoder()); } export function decodeCharacter( encodedAccount: EncodedAccount, ): Account; export function decodeCharacter( encodedAccount: MaybeEncodedAccount, ): MaybeAccount; export function decodeCharacter( encodedAccount: EncodedAccount | MaybeEncodedAccount, ): Account | MaybeAccount { return decodeAccount( encodedAccount as MaybeEncodedAccount, getCharacterDecoder(), ); } export async function fetchCharacter( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchMaybeCharacter(rpc, address, config); assertAccountExists(maybeAccount); return maybeAccount; } export async function fetchMaybeCharacter( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchEncodedAccount(rpc, address, config); return decodeCharacter(maybeAccount); } export async function fetchAllCharacter( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchAllMaybeCharacter(rpc, addresses, config); assertAccountsExist(maybeAccounts); return maybeAccounts; } export async function fetchAllMaybeCharacter( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); return maybeAccounts.map((maybeAccount) => decodeCharacter(maybeAccount)); } export async function fetchCharacterFromSeeds( rpc: Parameters[0], seeds: CharacterSeeds, config: FetchAccountConfig & { programAddress?: Address } = {}, ): Promise> { const maybeAccount = await fetchMaybeCharacterFromSeeds(rpc, seeds, config); assertAccountExists(maybeAccount); return maybeAccount; } export async function fetchMaybeCharacterFromSeeds( rpc: Parameters[0], seeds: CharacterSeeds, config: FetchAccountConfig & { programAddress?: Address } = {}, ): Promise> { const { programAddress, ...fetchConfig } = config; const [address] = await findCharacterPda(seeds, { programAddress }); return await fetchMaybeCharacter(rpc, address, fetchConfig); }