Expand description
Storage abstraction layer for RusMES
This crate provides a unified storage interface for the RusMES mail server, covering mailbox management, message delivery, metadata tracking, and quota enforcement.
§Architecture
The storage layer is composed of three orthogonal trait abstractions:
MailboxStore— Create, rename, delete, subscribe, and list mailboxes per user.MessageStore— Append, retrieve, copy, flag, search, and delete messages.MetadataStore— Manage per-user quotas and per-mailbox counters (exists/recent/unseen).
These three stores are obtained from a single StorageBackend factory, which bundles
them together and can be shared across protocol handlers (IMAP, JMAP, POP3, SMTP).
§Backends
| Backend | Module | Notes |
|---|---|---|
| Filesystem / Maildir | backends::filesystem | Atomic delivery via tmp/ → new/ rename; flag encoding in filenames |
| AmateRS distributed KV | backends::amaters | Mock implementation with circuit-breaker and exponential-backoff retry logic |
| PostgreSQL | backends::postgres | Full connection pool via sqlx, full-text search, migrations |
§Example — Filesystem backend
use rusmes_storage::{StorageBackend, MailboxStore, MailboxPath};
use rusmes_storage::backends::filesystem::FilesystemBackend;
let backend = FilesystemBackend::new("/var/mail/rusmes");
let mb_store = backend.mailbox_store();
let user: rusmes_proto::Username = "alice@example.com".parse()?;
let path = MailboxPath::new(user, vec!["INBOX".to_string()]);
let id = mb_store.create_mailbox(&path).await?;
let mailbox = mb_store.get_mailbox(&id).await?;
println!("Created: {:?}", mailbox);§ModSeq (Modification Sequence Numbers)
ModSeqGenerator produces monotonically increasing sequence numbers suitable for
IMAP CONDSTORE / QRESYNC extensions. Both mailbox-level and message-level ModSeq
values are tracked via MailboxModSeq and MessageModSeq wrappers.
§Metrics
StorageMetrics records per-operation histograms for timing storage calls from
higher-level protocol handlers, enabling Prometheus-compatible export.
Re-exports§
pub use metrics::Histogram;pub use metrics::MetricsSummary;pub use metrics::StorageMetrics;pub use metrics::StorageTimer;pub use modseq::MailboxModSeq;pub use modseq::MessageModSeq;pub use modseq::ModSeq;pub use modseq::ModSeqGenerator;
Modules§
- backends
- Storage backend implementations
- metrics
- Storage metrics collection and tracking
- modseq
- MODSEQ (Modification Sequence) tracking for IMAP CONDSTORE
Structs§
- Mailbox
- Mailbox metadata
- Mailbox
Counters - Mailbox counters
- Mailbox
Id - Unique identifier for a mailbox
- Mailbox
Path - Mailbox path (hierarchical)
- Message
Flags - Message flags (IMAP standard flags)
- Message
Metadata - Message metadata in a mailbox
- Quota
- User quota information
- Special
UseAttributes - Special-use mailbox attributes (RFC 6154)
Enums§
- Search
Criteria - Search criteria for messages
Traits§
- Mailbox
Store - Mailbox storage operations
- Message
Store - Message storage operations
- Metadata
Store - Metadata storage operations
- Storage
Backend - Combined storage backend