Skip to main content

actr_runtime_mailbox/
lib.rs

1//! # Actor-RTC Mailbox Layer
2//!
3//! Persistent mailbox layer for the Actor-RTC framework, backed by SQLite.
4//!
5//! ## Core Features
6//!
7//! - **Message Persistence**: Reliable message queue and mailbox storage
8//! - **Dead Letter Queue**: Poison message isolation and manual intervention
9//!
10//! ## Quick Start
11//!
12//! ```rust,no_run
13//! use actr_runtime_mailbox::prelude::*;
14//! use actr_protocol::{ActrId, Realm, ActrType};
15//! use actr_protocol::prost::Message as ProstMessage;
16//!
17//! #[tokio::main]
18//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
19//!     // Create SQLite mailbox storage
20//!     let mailbox = SqliteMailbox::new("./data/mailbox.db").await?;
21//!
22//!     // Create sender ActrId and serialize
23//!     let sender = ActrId {
24//!         realm: Realm { realm_id: 1 },
25//!         serial_number: 1000,
26//!         r#type: ActrType {
27//!             manufacturer: "example".to_string(),
28//!             name: "TestActor".to_string(),
29//!             version: "1.0.0".to_string(),
30//!         },
31//!     };
32//!     let mut from_bytes = Vec::new();
33//!     sender.encode(&mut from_bytes)?;
34//!
35//!     let message = b"Hello, World!".to_vec();
36//!
37//!     // Enqueue message (from is the sender's ActrId as Protobuf bytes)
38//!     let message_id = mailbox.enqueue(from_bytes, message, MessagePriority::Normal).await?;
39//!
40//!     // Dequeue messages
41//!     let messages = mailbox.dequeue().await?;
42//!     println!("Retrieved {} messages", messages.len());
43//!
44//!     // Acknowledge message
45//!     if let Some(msg) = messages.first() {
46//!         mailbox.ack(msg.id).await?;
47//!     }
48//!
49//!     Ok(())
50//! }
51//! ```
52
53pub mod error;
54pub mod mailbox;
55#[cfg(feature = "sqlite")]
56pub mod sqlite;
57
58// Dead Letter Queue modules
59pub mod dlq;
60#[cfg(feature = "sqlite")]
61pub mod sqlite_dlq;
62
63// Re-export core types
64pub use actr_protocol::{ActrError, ActrId};
65
66// Storage layer core interfaces
67pub use error::{StorageError, StorageResult};
68pub use mailbox::{
69    Mailbox, MailboxDepthObserver, MailboxStats, MessagePriority, MessageRecord, MessageStatus,
70};
71
72// DLQ core interfaces
73pub use dlq::{DeadLetterQueue, DlqQuery, DlqRecord, DlqStats};
74
75// Backend implementations (only available with sqlite feature)
76#[cfg(feature = "sqlite")]
77pub use sqlite::{SqliteConfig, SqliteMailbox};
78#[cfg(feature = "sqlite")]
79pub use sqlite_dlq::SqliteDeadLetterQueue;
80
81pub mod prelude {
82    //! Convenience imports for commonly used mailbox layer types and traits
83
84    pub use crate::error::{StorageError, StorageResult};
85    pub use crate::mailbox::{
86        Mailbox, MailboxDepthObserver, MailboxStats, MessagePriority, MessageRecord, MessageStatus,
87    };
88    #[cfg(feature = "sqlite")]
89    pub use crate::sqlite::{SqliteConfig, SqliteMailbox};
90
91    // Dead Letter Queue
92    pub use crate::dlq::{DeadLetterQueue, DlqQuery, DlqRecord, DlqStats};
93    #[cfg(feature = "sqlite")]
94    pub use crate::sqlite_dlq::SqliteDeadLetterQueue;
95
96    // Base types
97    pub use actr_protocol::{ActrError, ActrId};
98
99    // Async trait support
100    pub use async_trait::async_trait;
101
102    // Common utilities
103    pub use anyhow::{Context as AnyhowContext, Result as AnyhowResult};
104    pub use chrono::{DateTime, Utc};
105    pub use uuid::Uuid;
106}