clockwork_scheduler/instructions/
task_close.rs1use {
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}