/**
 * 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, getArrayDecoder, getArrayEncoder, getBooleanDecoder, getBooleanEncoder, getI128Decoder, getI128Encoder, getStructDecoder, getStructEncoder, getU128Decoder, getU128Encoder, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder } from '@solana/kit';

export type Tick = { initialized: boolean; liquidityNet: bigint; liquidityGross: bigint; feeGrowthOutsideA: bigint; feeGrowthOutsideB: bigint; rewardGrowthsOutside: Array<bigint>;  };

export type TickArgs = { initialized: boolean; liquidityNet: number | bigint; liquidityGross: number | bigint; feeGrowthOutsideA: number | bigint; feeGrowthOutsideB: number | bigint; rewardGrowthsOutside: Array<number | bigint>;  };

export function getTickEncoder(): FixedSizeEncoder<TickArgs> {
    return getStructEncoder([['initialized', getBooleanEncoder()], ['liquidityNet', getI128Encoder()], ['liquidityGross', getU128Encoder()], ['feeGrowthOutsideA', getU128Encoder()], ['feeGrowthOutsideB', getU128Encoder()], ['rewardGrowthsOutside', getArrayEncoder(getU128Encoder(), { size: 3 })]]);
}

export function getTickDecoder(): FixedSizeDecoder<Tick> {
    return getStructDecoder([['initialized', getBooleanDecoder()], ['liquidityNet', getI128Decoder()], ['liquidityGross', getU128Decoder()], ['feeGrowthOutsideA', getU128Decoder()], ['feeGrowthOutsideB', getU128Decoder()], ['rewardGrowthsOutside', getArrayDecoder(getU128Decoder(), { size: 3 })]]);
}

export function getTickCodec(): FixedSizeCodec<TickArgs, Tick> {
    return combineCodec(getTickEncoder(), getTickDecoder());
}