tako_rs_core/queue/
builder.rs1use std::collections::VecDeque;
4use std::sync::Arc;
5use std::sync::atomic::AtomicBool;
6use std::sync::atomic::AtomicU64;
7
8use parking_lot::Mutex;
9use scc::HashMap as SccHashMap;
10use tokio::sync::Notify;
11
12use super::RetryPolicy;
13use super::runtime::Queue;
14use super::runtime::QueueInner;
15
16pub struct QueueBuilder {
18 pub(crate) workers: usize,
19 pub(crate) retry: RetryPolicy,
20}
21
22impl QueueBuilder {
23 pub fn workers(mut self, n: usize) -> Self {
25 self.workers = n.max(1);
26 self
27 }
28
29 pub fn retry(mut self, policy: RetryPolicy) -> Self {
31 self.retry = policy;
32 self
33 }
34
35 pub fn build(self) -> Queue {
37 Queue {
38 inner: Arc::new(QueueInner {
39 pending: Mutex::new(VecDeque::new()),
40 handlers: SccHashMap::new(),
41 dead_letters: Mutex::new(Vec::new()),
42 notify: Notify::new(),
43 next_id: AtomicU64::new(1),
44 num_workers: self.workers,
45 retry_policy: self.retry,
46 shutdown: AtomicBool::new(false),
47 inflight: AtomicU64::new(0),
48 drain_notify: Notify::new(),
49 }),
50 }
51 }
52}