clockwork_scheduler/instructions/
queue_resume.rs

1use {
2    crate::state::*,
3    anchor_lang::prelude::*,
4};
5
6#[derive(Accounts)]
7#[instruction(skip_forward: bool)]
8pub struct QueueResume<'info> {
9    #[account()]
10    pub authority: Signer<'info>,
11
12    #[account(
13        mut,
14        seeds = [
15            SEED_QUEUE, 
16            queue.authority.key().as_ref(),
17            queue.name.as_bytes(),
18        ],
19        bump,
20        has_one = authority,
21        constraint = queue.status == QueueStatus::Paused
22    )]
23    pub queue: Account<'info, Queue>,
24}
25
26pub fn handler(ctx: Context<QueueResume>, skip_forward: bool) -> Result<()> {
27    // Get accounts
28    let queue = &mut ctx.accounts.queue;
29
30    // Skip forward, if required
31    if skip_forward {
32        let ts = Clock::get().unwrap().unix_timestamp;
33        queue.process_at = queue.next_process_at(ts);
34    }
35
36    // Pause the queue
37    queue.status = QueueStatus::Pending;
38
39    Ok(())
40}