/** * 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, getU32Decoder, getU32Encoder, 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 { findRegionTrackerPda, RegionTrackerSeeds } from '../pdas'; import { getRegionDecoder, getRegionEncoder, getRegionIdDecoder, getRegionIdEncoder, type Region, type RegionArgs, type RegionId, type RegionIdArgs, } from '../types'; export const REGION_TRACKER_DISCRIMINATOR = new Uint8Array([ 23, 29, 27, 223, 71, 152, 0, 225, ]); export function getRegionTrackerDiscriminatorBytes() { return fixEncoderSize(getBytesEncoder(), 8).encode( REGION_TRACKER_DISCRIMINATOR, ); } /** Region Tracker Account */ export type RegionTracker = { discriminator: ReadonlyUint8Array; /** The data version of this account. */ version: number; /** the `Game` that this belongs to */ gameId: Address; /** * Grid snapping exponent `k` used for region borders; quantum is `2^-k`. * * - `Point` is `I8F56`, so `k` is in the range 0..=56. * - A value of 56 means "no-op" snapping (full precision retained). */ gridK: number; /** the regions in this tracker */ regions: { /** The total size of the unsized bytes in the list */ unsizedLen: number; /** The list of items containing offsets, and potentially extra metadata, for the start of each element in the unsized list */ offsetList: Array<{ offset: number; key: RegionId }>; /** The list of byte offsets for the start of each element in the unsized list */ unsizedList: Array; }; }; export type RegionTrackerArgs = { /** The data version of this account. */ version: number; /** the `Game` that this belongs to */ gameId: Address; /** * Grid snapping exponent `k` used for region borders; quantum is `2^-k`. * * - `Point` is `I8F56`, so `k` is in the range 0..=56. * - A value of 56 means "no-op" snapping (full precision retained). */ gridK: number; /** the regions in this tracker */ regions: { /** The total size of the unsized bytes in the list */ unsizedLen: number; /** The list of items containing offsets, and potentially extra metadata, for the start of each element in the unsized list */ offsetList: Array<{ offset: number; key: RegionIdArgs }>; /** The list of byte offsets for the start of each element in the unsized list */ unsizedList: Array; }; }; /** Gets the encoder for {@link RegionTrackerArgs} account data. */ export function getRegionTrackerEncoder(): Encoder { return transformEncoder( getStructEncoder([ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)], ['version', getU8Encoder()], ['gameId', getAddressEncoder()], ['gridK', getU8Encoder()], [ 'regions', getStructEncoder([ ['unsizedLen', getU32Encoder()], [ 'offsetList', getArrayEncoder( getStructEncoder([ ['offset', getU32Encoder()], ['key', getRegionIdEncoder()], ]), ), ], ['unsizedList', getArrayEncoder(getRegionEncoder())], ]), ], ]), (value) => ({ ...value, discriminator: REGION_TRACKER_DISCRIMINATOR }), ); } /** Gets the decoder for {@link RegionTracker} account data. */ export function getRegionTrackerDecoder(): Decoder { return getStructDecoder([ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)], ['version', getU8Decoder()], ['gameId', getAddressDecoder()], ['gridK', getU8Decoder()], [ 'regions', getStructDecoder([ ['unsizedLen', getU32Decoder()], [ 'offsetList', getArrayDecoder( getStructDecoder([ ['offset', getU32Decoder()], ['key', getRegionIdDecoder()], ]), ), ], ['unsizedList', getArrayDecoder(getRegionDecoder())], ]), ], ]); } /** Gets the codec for {@link RegionTracker} account data. */ export function getRegionTrackerCodec(): Codec< RegionTrackerArgs, RegionTracker > { return combineCodec(getRegionTrackerEncoder(), getRegionTrackerDecoder()); } export function decodeRegionTracker( encodedAccount: EncodedAccount, ): Account; export function decodeRegionTracker( encodedAccount: MaybeEncodedAccount, ): MaybeAccount; export function decodeRegionTracker( encodedAccount: EncodedAccount | MaybeEncodedAccount, ): Account | MaybeAccount { return decodeAccount( encodedAccount as MaybeEncodedAccount, getRegionTrackerDecoder(), ); } export async function fetchRegionTracker( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchMaybeRegionTracker(rpc, address, config); assertAccountExists(maybeAccount); return maybeAccount; } export async function fetchMaybeRegionTracker( rpc: Parameters[0], address: Address, config?: FetchAccountConfig, ): Promise> { const maybeAccount = await fetchEncodedAccount(rpc, address, config); return decodeRegionTracker(maybeAccount); } export async function fetchAllRegionTracker( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchAllMaybeRegionTracker( rpc, addresses, config, ); assertAccountsExist(maybeAccounts); return maybeAccounts; } export async function fetchAllMaybeRegionTracker( rpc: Parameters[0], addresses: Array
, config?: FetchAccountsConfig, ): Promise[]> { const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config); return maybeAccounts.map((maybeAccount) => decodeRegionTracker(maybeAccount)); } export async function fetchRegionTrackerFromSeeds( rpc: Parameters[0], seeds: RegionTrackerSeeds, config: FetchAccountConfig & { programAddress?: Address } = {}, ): Promise> { const maybeAccount = await fetchMaybeRegionTrackerFromSeeds( rpc, seeds, config, ); assertAccountExists(maybeAccount); return maybeAccount; } export async function fetchMaybeRegionTrackerFromSeeds( rpc: Parameters[0], seeds: RegionTrackerSeeds, config: FetchAccountConfig & { programAddress?: Address } = {}, ): Promise> { const { programAddress, ...fetchConfig } = config; const [address] = await findRegionTrackerPda(seeds, { programAddress }); return await fetchMaybeRegionTracker(rpc, address, fetchConfig); }