pub struct TransitionRulePack<const N: usize> { /* private fields */ }Expand description
Associates validation rules with specific instruction tags.
Each instruction in your program can have its own set of checks, looked up by the dispatch tag. This avoids running irrelevant checks for instructions that don’t need them.
ⓘ
let mut tr = TransitionRulePack::<16>::new();
tr.add(0, validate_init_accounts)?; // Init
tr.add(1, validate_deposit_accounts)?; // Deposit
tr.add(2, validate_withdraw_accounts)?; // Withdraw
// In handler: run only rules for this instruction
tr.run_for(instruction_tag, &ctx)?;Implementations§
Source§impl<const N: usize> TransitionRulePack<N>
impl<const N: usize> TransitionRulePack<N>
Sourcepub fn add(
&mut self,
tag: InstructionTag,
rule: ValidateFn,
) -> Result<(), ProgramError>
pub fn add( &mut self, tag: InstructionTag, rule: ValidateFn, ) -> Result<(), ProgramError>
Register a rule for a specific instruction tag.
Sourcepub fn run_for(
&self,
tag: InstructionTag,
ctx: &ValidationContext<'_>,
) -> ProgramResult
pub fn run_for( &self, tag: InstructionTag, ctx: &ValidationContext<'_>, ) -> ProgramResult
Run all rules matching the given instruction tag. Fail-fast.
Trait Implementations§
Auto Trait Implementations§
impl<const N: usize> Freeze for TransitionRulePack<N>
impl<const N: usize> RefUnwindSafe for TransitionRulePack<N>
impl<const N: usize> Send for TransitionRulePack<N>
impl<const N: usize> Sync for TransitionRulePack<N>
impl<const N: usize> Unpin for TransitionRulePack<N>
impl<const N: usize> UnsafeUnpin for TransitionRulePack<N>
impl<const N: usize> UnwindSafe for TransitionRulePack<N>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more