import { FixedSizeCodec, FixedSizeDecoder, FixedSizeEncoder } from '@solana/codecs-core'; import { getStructCodec, getStructDecoder, getStructEncoder } from '@solana/codecs-data-structures'; import { getU8Codec, getU8Decoder, getU8Encoder } from '@solana/codecs-numbers'; import { getCompiledMessageHeader } from '../../compile/legacy/header'; type MessageHeader = ReturnType; let memoizedU8Encoder: FixedSizeEncoder | undefined; function getMemoizedU8Encoder(): FixedSizeEncoder { if (!memoizedU8Encoder) memoizedU8Encoder = getU8Encoder(); return memoizedU8Encoder; } let memoizedU8Decoder: FixedSizeDecoder | undefined; function getMemoizedU8Decoder(): FixedSizeDecoder { if (!memoizedU8Decoder) memoizedU8Decoder = getU8Decoder(); return memoizedU8Decoder; } let memoizedU8Codec: FixedSizeCodec | undefined; function getMemoizedU8Codec(): FixedSizeCodec { if (!memoizedU8Codec) memoizedU8Codec = getU8Codec(); return memoizedU8Codec; } export function getMessageHeaderEncoder(): FixedSizeEncoder { return getStructEncoder([ ['numSignerAccounts', getMemoizedU8Encoder()], ['numReadonlySignerAccounts', getMemoizedU8Encoder()], ['numReadonlyNonSignerAccounts', getMemoizedU8Encoder()], ]) as FixedSizeEncoder; } export function getMessageHeaderDecoder(): FixedSizeDecoder { return getStructDecoder([ ['numSignerAccounts', getMemoizedU8Decoder()], ['numReadonlySignerAccounts', getMemoizedU8Decoder()], ['numReadonlyNonSignerAccounts', getMemoizedU8Decoder()], ]) as FixedSizeDecoder; } export function getMessageHeaderCodec(): FixedSizeCodec { return getStructCodec([ ['numSignerAccounts', getMemoizedU8Codec()], ['numReadonlySignerAccounts', getMemoizedU8Codec()], ['numReadonlyNonSignerAccounts', getMemoizedU8Codec()], ]) as FixedSizeCodec; }