/**
* 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,
getI64Decoder,
getI64Encoder,
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 {
getPermissionsDecoder,
getPermissionsEncoder,
type Permissions,
type PermissionsArgs,
} from "../types";
export const PERPETUALS_DISCRIMINATOR = new Uint8Array([
28, 167, 98, 191, 104, 82, 108, 196,
]);
export function getPerpetualsDiscriminatorBytes() {
return fixEncoderSize(getBytesEncoder(), 8).encode(PERPETUALS_DISCRIMINATOR);
}
export type Perpetuals = {
discriminator: ReadonlyUint8Array;
permissions: Permissions;
pools: Array
;
admin: Address;
transferAuthorityBump: number;
perpetualsBump: number;
inceptionTime: bigint;
};
export type PerpetualsArgs = {
permissions: PermissionsArgs;
pools: Array;
admin: Address;
transferAuthorityBump: number;
perpetualsBump: number;
inceptionTime: number | bigint;
};
/** Gets the encoder for {@link PerpetualsArgs} account data. */
export function getPerpetualsEncoder(): Encoder {
return transformEncoder(
getStructEncoder([
["discriminator", fixEncoderSize(getBytesEncoder(), 8)],
["permissions", getPermissionsEncoder()],
["pools", getArrayEncoder(getAddressEncoder())],
["admin", getAddressEncoder()],
["transferAuthorityBump", getU8Encoder()],
["perpetualsBump", getU8Encoder()],
["inceptionTime", getI64Encoder()],
]),
(value) => ({ ...value, discriminator: PERPETUALS_DISCRIMINATOR }),
);
}
/** Gets the decoder for {@link Perpetuals} account data. */
export function getPerpetualsDecoder(): Decoder {
return getStructDecoder([
["discriminator", fixDecoderSize(getBytesDecoder(), 8)],
["permissions", getPermissionsDecoder()],
["pools", getArrayDecoder(getAddressDecoder())],
["admin", getAddressDecoder()],
["transferAuthorityBump", getU8Decoder()],
["perpetualsBump", getU8Decoder()],
["inceptionTime", getI64Decoder()],
]);
}
/** Gets the codec for {@link Perpetuals} account data. */
export function getPerpetualsCodec(): Codec {
return combineCodec(getPerpetualsEncoder(), getPerpetualsDecoder());
}
export function decodePerpetuals(
encodedAccount: EncodedAccount,
): Account;
export function decodePerpetuals(
encodedAccount: MaybeEncodedAccount,
): MaybeAccount;
export function decodePerpetuals(
encodedAccount: EncodedAccount | MaybeEncodedAccount,
): Account | MaybeAccount {
return decodeAccount(
encodedAccount as MaybeEncodedAccount,
getPerpetualsDecoder(),
);
}
export async function fetchPerpetuals(
rpc: Parameters[0],
address: Address,
config?: FetchAccountConfig,
): Promise> {
const maybeAccount = await fetchMaybePerpetuals(rpc, address, config);
assertAccountExists(maybeAccount);
return maybeAccount;
}
export async function fetchMaybePerpetuals(
rpc: Parameters[0],
address: Address,
config?: FetchAccountConfig,
): Promise> {
const maybeAccount = await fetchEncodedAccount(rpc, address, config);
return decodePerpetuals(maybeAccount);
}
export async function fetchAllPerpetuals(
rpc: Parameters[0],
addresses: Array,
config?: FetchAccountsConfig,
): Promise[]> {
const maybeAccounts = await fetchAllMaybePerpetuals(rpc, addresses, config);
assertAccountsExist(maybeAccounts);
return maybeAccounts;
}
export async function fetchAllMaybePerpetuals(
rpc: Parameters[0],
addresses: Array,
config?: FetchAccountsConfig,
): Promise[]> {
const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);
return maybeAccounts.map((maybeAccount) => decodePerpetuals(maybeAccount));
}