account_compression/utils/
queue.rs

1use std::collections::HashMap;
2
3use anchor_lang::prelude::{AccountInfo, Pubkey};
4use light_merkle_tree_metadata::QueueType;
5
6/// Mapping of address queue public keys to a bundle containing:
7///
8/// * The queue.
9/// * Associated Merkle tree.
10/// * Addresses to insert.
11pub type QueueMap<'a, 'info> = HashMap<Pubkey, QueueBundle<'a, 'info>>;
12
13/// A bundle containing:
14///
15/// * Address queue.
16/// * Merkle tree associated with that queue.
17/// * Addresses to insert to that queue.
18pub struct QueueBundle<'a, 'info> {
19    pub queue_type: QueueType,
20    pub accounts: Vec<&'info AccountInfo<'info>>,
21    pub elements: Vec<&'a [u8; 32]>,
22    pub indices: Vec<u32>,
23    pub prove_by_index: Vec<bool>,
24}
25
26impl<'info> QueueBundle<'_, 'info> {
27    pub fn new(queue_type: QueueType, accounts: Vec<&'info AccountInfo<'info>>) -> Self {
28        Self {
29            queue_type,
30            accounts,
31            elements: Vec::new(),
32            indices: Vec::new(),
33            prove_by_index: Vec::new(),
34        }
35    }
36}