actr_mailbox/lib.rs
1//! # Actor-RTC Mailbox Layer
2//!
3//! 🗄️ Actor-RTC 框架的持久化邮箱层,由 SQLite 支持。
4//!
5//! ## 核心功能
6//!
7//! - **消息持久化**: 可靠的消息队列和邮箱存储
8//! - **Dead Letter Queue**: 毒消息隔离和人工干预
9//!
10//! ## 快速开始
11//!
12//! ```rust,no_run
13//! use actr_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//! // 创建 SQLite 邮箱存储
20//! let mailbox = SqliteMailbox::new("./data/mailbox.db").await?;
21//!
22//! // 创建发送者 ActrId 并序列化
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//! },
30//! };
31//! let mut from_bytes = Vec::new();
32//! sender.encode(&mut from_bytes)?;
33//!
34//! let message = b"Hello, World!".to_vec();
35//!
36//! // 入队消息(from 为发送方 ActrId 的 Protobuf bytes)
37//! let message_id = mailbox.enqueue(from_bytes, message, MessagePriority::Normal).await?;
38//!
39//! // 出队消息
40//! let messages = mailbox.dequeue().await?;
41//! println!("Retrieved {} messages", messages.len());
42//!
43//! // 确认消息
44//! if let Some(msg) = messages.first() {
45//! mailbox.ack(msg.id).await?;
46//! }
47//!
48//! Ok(())
49//! }
50//! ```
51
52pub mod error;
53pub mod mailbox;
54pub mod sqlite;
55
56// Dead Letter Queue modules
57pub mod dlq;
58pub mod sqlite_dlq;
59
60// 重新导出核心类型
61pub use actr_protocol::{ActrError, ActrId};
62
63// 存储层核心接口
64pub use error::{StorageError, StorageResult};
65pub use mailbox::{Mailbox, MailboxStats, MessagePriority, MessageRecord, MessageStatus};
66
67// DLQ 核心接口
68pub use dlq::{DeadLetterQueue, DlqQuery, DlqRecord, DlqStats};
69
70// 后端实现
71pub use sqlite::{SqliteConfig, SqliteMailbox};
72pub use sqlite_dlq::SqliteDeadLetterQueue;
73
74pub mod prelude {
75 //! 邮箱层常用类型和 trait 的便利导入
76
77 pub use crate::error::{StorageError, StorageResult};
78 pub use crate::mailbox::{
79 Mailbox, MailboxStats, MessagePriority, MessageRecord, MessageStatus,
80 };
81 pub use crate::sqlite::{SqliteConfig, SqliteMailbox};
82
83 // Dead Letter Queue
84 pub use crate::dlq::{DeadLetterQueue, DlqQuery, DlqRecord, DlqStats};
85 pub use crate::sqlite_dlq::SqliteDeadLetterQueue;
86
87 // 基础类型
88 pub use actr_protocol::{ActrError, ActrId};
89
90 // 异步 trait 支持
91 pub use async_trait::async_trait;
92
93 // 常用工具
94 pub use anyhow::{Context as AnyhowContext, Result as AnyhowResult};
95 pub use chrono::{DateTime, Utc};
96 pub use uuid::Uuid;
97}