Skip to main content

jmap_mail_types/
lib.rs

1//! RFC 8621 JMAP for Mail data types.
2//!
3//! Provides [`Email`], [`Mailbox`], [`Thread`], [`Identity`], [`EmailSubmission`],
4//! and [`SearchSnippet`] — the core object types defined by
5//! [RFC 8621](https://www.rfc-editor.org/rfc/rfc8621).
6//!
7//! This crate is types-only: no method handlers, no async, no network I/O.
8//! It sits between `jmap-types` (shared wire primitives) and `jmap-mail-server`
9//! (method handlers).
10//!
11//! All types implement [`serde::Serialize`] and [`serde::Deserialize`] with the
12//! camelCase field names required by the JMAP wire format.
13//!
14//! # Example
15//!
16//! ```rust
17//! use jmap_mail_types::Mailbox;
18//!
19//! let json = r#"{
20//!     "id": "mb1",
21//!     "name": "Inbox",
22//!     "role": "inbox",
23//!     "sortOrder": 10,
24//!     "totalEmails": 42,
25//!     "unreadEmails": 3,
26//!     "totalThreads": 20,
27//!     "unreadThreads": 2,
28//!     "myRights": {
29//!         "mayReadItems": true,
30//!         "mayAddItems": true,
31//!         "mayRemoveItems": true,
32//!         "maySetSeen": true,
33//!         "maySetKeywords": true,
34//!         "mayCreateChild": true,
35//!         "mayRename": true,
36//!         "mayDelete": false,
37//!         "maySubmit": false
38//!     },
39//!     "isSubscribed": true
40//! }"#;
41//!
42//! let mailbox: Mailbox = serde_json::from_str(json).unwrap();
43//! assert_eq!(mailbox.name, "Inbox");
44//! ```
45
46#![forbid(unsafe_code)]
47
48pub mod backend;
49pub mod capability;
50pub mod email;
51pub mod identity;
52pub mod keyword;
53pub mod mailbox;
54pub mod query;
55pub mod snippet;
56pub mod submission;
57pub mod thread;
58pub mod vacation;
59
60#[cfg(feature = "mdn")]
61pub mod mdn;
62
63#[cfg(feature = "sieve")]
64pub mod sieve;
65#[cfg(feature = "sieve")]
66pub use sieve::{SieveAccountCapability, SieveCapability, SieveScript, JMAP_SIEVE_SCRIPTS_URI};
67
68#[cfg(feature = "sieve")]
69pub use backend::SieveScriptProperty;
70pub use backend::{
71    EmailProperty, EmailSubmissionProperty, IdentityProperty, MailboxProperty,
72    SearchSnippetProperty, ThreadProperty, VacationResponseProperty,
73};
74pub use capability::{
75    MailAccountCapability, MailCapability, SubmissionAccountCapability, SubmissionCapability,
76    VacationResponseCapability, JMAP_MAIL_URI, JMAP_SUBMISSION_URI, JMAP_VACATIONRESPONSE_URI,
77};
78pub use email::{
79    Email, EmailAddress, EmailAddressGroup, EmailBodyPart, EmailBodyValue, EmailHeader,
80};
81pub use identity::Identity;
82pub use keyword::{Keyword, KeywordError};
83pub use mailbox::{
84    Mailbox, MailboxFilterCondition, MailboxRights, MailboxRole, MAILBOX_FILTER_CONDITION_KEYS,
85};
86pub use query::{
87    ComparatorProperty, EmailComparator, EmailFilter, EmailFilterCondition, EmailSubmissionFilter,
88    Filter, FilterOperator, MailboxFilter, Operator,
89};
90pub use snippet::SearchSnippet;
91pub use submission::{
92    Address, Delivered, DeliveryStatus, Displayed, EmailSubmission, EmailSubmissionFilterCondition,
93    Envelope, UndoStatus,
94};
95pub use thread::Thread;
96pub use vacation::VacationResponse;