/** * 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, getArrayDecoder, getArrayEncoder, getBytesDecoder, getBytesEncoder, getStructDecoder, getStructEncoder, 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 { getI8F56Decoder, getI8F56Encoder, type I8F56, type I8F56Args, } from '../../fixed/codecs'; import { findRegionBorderUploadPda, RegionBorderUploadSeeds } from '../pdas'; import { getRegionIdDecoder, getRegionIdEncoder, type RegionId, type RegionIdArgs, } from '../types'; export const REGION_BORDER_UPLOAD_DISCRIMINATOR = new Uint8Array([ 100, 219, 235, 253, 57, 201, 106, 205, ]); export function getRegionBorderUploadDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( REGION_BORDER_UPLOAD_DISCRIMINATOR, ); } /** * Region Border Upload (staging) Account * * Stores an in-progress region border upload in chunks, without mutating the live * [`RegionTracker`] / [`Region`] data until a final commit step. */ export type RegionBorderUpload = { discriminator: ReadonlyUint8Array; /** The data version of this account. */ version: number; /** The game this upload belongs to. */ gameId: Address; /** The region being updated/created. */ regionId: RegionId; /** Expected total number of border vertices. */ expectedLen: number; /** PDA bump */ bump: number; /** Staged border vertices (same representation as [`Region::border`]). */ border: Array>; }; export type RegionBorderUploadArgs = { /** The data version of this account. */ version: number; /** The game this upload belongs to. */ gameId: Address; /** The region being updated/created. */ regionId: RegionIdArgs; /** Expected total number of border vertices. */ expectedLen: number; /** PDA bump */ bump: number; /** Staged border vertices (same representation as [`Region::border`]). */ border: Array>; }; /** Gets the encoder for {@link RegionBorderUploadArgs} account data. */ export function getRegionBorderUploadEncoder(): Encoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['version', getU8Encoder()], ['gameId', getAddressEncoder()], ['regionId', getRegionIdEncoder()], ['expectedLen', getU8Encoder()], ['bump', getU8Encoder()], [ 'border', getArrayEncoder(getArrayEncoder(getI8F56Encoder(), { size: 2 })), ], ]), (value) => ({ ...value, discriminator: REGION_BORDER_UPLOAD_DISCRIMINATOR, }), ); } /** Gets the decoder for {@link RegionBorderUpload} account data. */ export function getRegionBorderUploadDecoder(): Decoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['version', getU8Decoder()], ['gameId', getAddressDecoder()], ['regionId', getRegionIdDecoder()], ['expectedLen', getU8Decoder()], ['bump', getU8Decoder()], [ 'border', getArrayDecoder(getArrayDecoder(getI8F56Decoder(), { size: 2 })), ], ]); } /** Gets the codec for {@link RegionBorderUpload} account data. */ export function getRegionBorderUploadCodec(): Codec< RegionBorderUploadArgs, RegionBorderUpload > { return combineCodec( getRegionBorderUploadEncoder(), getRegionBorderUploadDecoder(), ); } export function decodeRegionBorderUpload( encodedAccount: EncodedAccount, ): Account; export function decodeRegionBorderUpload( encodedAccount: MaybeEncodedAccount, ): MaybeAccount; export function decodeRegionBorderUpload( encodedAccount: EncodedAccount | MaybeEncodedAccount, ): | Account | MaybeAccount { return decodeAccount( encodedAccount as MaybeEncodedAccount, getRegionBorderUploadDecoder(), ); } export async function fetchRegionBorderUpload( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchMaybeRegionBorderUpload(rpc, address, config); assertAccountExists(maybeAccount); return maybeAccount; } export async function fetchMaybeRegionBorderUpload< TAddress extends string = string, >( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchEncodedAccount(rpc, address, config); return decodeRegionBorderUpload(maybeAccount); } export async function fetchAllRegionBorderUpload( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchAllMaybeRegionBorderUpload( rpc, addresses, config, ); assertAccountsExist(maybeAccounts); return maybeAccounts; } export async function fetchAllMaybeRegionBorderUpload( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); return maybeAccounts.map((maybeAccount) => decodeRegionBorderUpload(maybeAccount), ); } export async function fetchRegionBorderUploadFromSeeds( rpc: Parameters[0], seeds: RegionBorderUploadSeeds, config: FetchAccountConfig & { programAddress?: Address } = {}, ): Promise> { const maybeAccount = await fetchMaybeRegionBorderUploadFromSeeds( rpc, seeds, config, ); assertAccountExists(maybeAccount); return maybeAccount; } export async function fetchMaybeRegionBorderUploadFromSeeds( rpc: Parameters[0], seeds: RegionBorderUploadSeeds, config: FetchAccountConfig & { programAddress?: Address } = {}, ): Promise> { const { programAddress, ...fetchConfig } = config; const [address] = await findRegionBorderUploadPda(seeds, { programAddress }); return await fetchMaybeRegionBorderUpload(rpc, address, fetchConfig); }