arch_event_queues/lib.rs
1//! In-memory and RocksDB-backed event queues.
2//!
3//! # In-memory queue
4//!
5//! Use [`EventQueue`] when events only need to live in memory.
6//!
7//! ```
8//! use arch_event_queues::EventQueue;
9//!
10//! #[derive(Debug, PartialEq, Eq)]
11//! struct Event {
12//! payload: String,
13//! }
14//!
15//! let queue = EventQueue::<Event>::new();
16//! queue
17//! .push(Event {
18//! payload: "created".to_string(),
19//! })
20//! .unwrap();
21//!
22//! assert_eq!(
23//! queue.pop().unwrap(),
24//! Some(Event {
25//! payload: "created".to_string(),
26//! })
27//! );
28//! ```
29//!
30//! # Durable queue
31//!
32//! Use [`DurableEventQueue`] when events must survive process restarts until
33//! they are acknowledged.
34//!
35//! ```
36//! use arch_event_queues::DurableEventQueue;
37//! use borsh::{BorshDeserialize, BorshSerialize};
38//!
39//! #[derive(Clone, Debug, PartialEq, Eq, BorshSerialize, BorshDeserialize)]
40//! struct Event {
41//! payload: String,
42//! }
43//!
44//! let dir = tempfile::tempdir().unwrap();
45//! let queue = DurableEventQueue::<Event>::open(dir.path()).unwrap();
46//!
47//! let queued = queue
48//! .push(Event {
49//! payload: "index block".to_string(),
50//! })
51//! .unwrap();
52//!
53//! let next = queue.pop().unwrap().expect("queued job");
54//! assert_eq!(next.id, queued.id);
55//!
56//! queue.ack(next.id).unwrap();
57//! ```
58
59pub mod durable_event_queue;
60pub mod event_queue;
61
62pub use durable_event_queue::{
63 DurableEvent, DurableEventQueue, DurableEventQueueError, DurableEventQueueIterator,
64 DurableEventQueueOptions,
65};
66pub use event_queue::{EventQueue, EventQueueError};