clockwork_scheduler/instructions/
task_close.rs

1use {
2    crate::state::*,
3    anchor_lang::prelude::*,
4};
5
6
7#[derive(Accounts)]
8pub struct TaskClose<'info> {
9    #[account()]
10    pub authority: Signer<'info>,
11
12    #[account(mut)]
13    pub close_to: SystemAccount<'info>,
14
15    #[account(
16        mut,
17        seeds = [
18            SEED_QUEUE, 
19            queue.authority.as_ref(),
20            queue.name.as_bytes(),
21        ],
22        bump,
23        has_one = authority,
24        constraint = queue.status == QueueStatus::Pending || queue.status == QueueStatus::Paused
25    )]
26    pub queue: Account<'info, Queue>,
27
28    #[account(
29        mut,
30        seeds = [
31            SEED_TASK, 
32            task.queue.as_ref(),
33            task.id.to_be_bytes().as_ref(),
34        ],
35        bump,
36        constraint = task.id == queue.task_count.checked_sub(1).unwrap(),
37        close = close_to
38    )]
39    pub task: Account<'info, Task>,
40}
41
42pub fn handler(ctx: Context<TaskClose>) -> Result<()> {
43    let queue = &mut ctx.accounts.queue;
44    queue.task_count = queue.task_count.checked_sub(1).unwrap();
45    Ok(())
46}