/** * 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, getI16Decoder, getI16Encoder, getStructDecoder, getStructEncoder, getU16Decoder, getU16Encoder, getU8Decoder, getU8Encoder, type FixedSizeCodec, type FixedSizeDecoder, type FixedSizeEncoder, } from '@solana/kit'; /** * One conditional perk pre-loaded into the summary's `perk_cond[8]` table; a consumer * evaluates its `trigger` in a ≤8-iteration loop (master §3.4; reference-impl * `CondPerkEntry`, record_rs:320-327). * * Byte-exact to `layout.CondPerkEntryPod` (record_rs:566-577): * `perk_id(2) + slot_family(1) + trigger(1) + mag(2) + tier(1) + _pad(1) = 8 B`. * * `mag` is stored as an **`i16` q-format fixed-point delta** (NOT `f64` — the * reference-impl models it as `f64` only in its behavioral mirror; the byte-exact * proof and the real program store the raw `i16`, record_rs:319,573). The fold site * reconstitutes it into the engine's fixed-point (`PreciseStatVal`) when it sums — * the q-format scale + the fold are owned by `folds/`, not by this value object. * `slot_family` / `trigger` are raw discriminant bytes (decode via * `SlotFamily::from_u8` / `Trigger::from_u8`), kept as `u8` to preserve Pod-ness. */ export type CondPerkEntry = { /** On-chain perk definition id (`0` ⇒ unused table slot). */ perkId: number; /** Raw `SlotFamily` discriminant the perk modifies. */ slotFamily: number; /** Raw `Trigger` discriminant gating the perk. */ trigger: number; /** Magnitude as an `i16` q-format delta (scale owned by `folds/`). */ mag: number; /** Perk tier. */ tier: number; /** Padding to the 8-byte slot (`layout.CondPerkEntryPod._pad`). */ pad: number; }; export type CondPerkEntryArgs = CondPerkEntry; export function getCondPerkEntryEncoder(): FixedSizeEncoder { return getStructEncoder([ ['perkId', getU16Encoder()], ['slotFamily', getU8Encoder()], ['trigger', getU8Encoder()], ['mag', getI16Encoder()], ['tier', getU8Encoder()], ['pad', getU8Encoder()], ]); } export function getCondPerkEntryDecoder(): FixedSizeDecoder { return getStructDecoder([ ['perkId', getU16Decoder()], ['slotFamily', getU8Decoder()], ['trigger', getU8Decoder()], ['mag', getI16Decoder()], ['tier', getU8Decoder()], ['pad', getU8Decoder()], ]); } export function getCondPerkEntryCodec(): FixedSizeCodec< CondPerkEntryArgs, CondPerkEntry > { return combineCodec(getCondPerkEntryEncoder(), getCondPerkEntryDecoder()); }