triggr/instructions/
close_trigger.rs1pub use crate::state::*;
2use anchor_lang::prelude::*;
3
4#[derive(Accounts)]
5#[instruction(_trigger_index: u64)]
6pub struct CloseTrigger<'info> {
7 #[account(mut)]
9 authority: Signer<'info>,
10
11 #[account(mut, seeds = ["payer".as_bytes(), authority.key().as_ref()], bump)]
12 payer: SystemAccount<'info>,
13
14 #[account(
15 mut,
16 seeds = ["user".as_bytes(), &authority.key().to_bytes()],
17 bump,
18 realloc = 8 + User::MIN_SIZE + (user.active_triggers.len() * 32) - 32,
19 realloc::payer = authority,
20 realloc::zero = true
21 )]
22 user: Account<'info, User>,
23
24 #[account(mut, close = authority, seeds = ["trigger".as_bytes(), &authority.key().to_bytes()[..], &_trigger_index.to_le_bytes()], bump )]
25 trigger: Account<'info, Trigger>,
26
27 system_program: Program<'info, System>,
28}
29
30pub fn handler(ctx: Context<CloseTrigger>, _trigger_index: u64) -> Result<()> {
31
32 let active_triggers = &mut ctx.accounts.user.active_triggers;
33
34 active_triggers.retain(|&x| x != ctx.accounts.trigger.key());
35
36 ctx.accounts.user.active_triggers = active_triggers.clone();
37
38 Ok(())
39}