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
48mod backend;
49mod capability;
50mod email;
51mod identity;
52mod keyword;
53mod mailbox;
54mod query;
55mod snippet;
56mod submission;
57mod thread;
58mod vacation;
59
60#[cfg(feature = "mdn")]
61mod mdn;
62#[cfg(feature = "mdn")]
63pub use mdn::{
64    ActionMode, Disposition, DispositionType, JMAP_MDN_URI, Mdn, MdnParseRequest, MdnParseResponse,
65    MdnSendRequest, MdnSendResponse, SendingMode,
66};
67
68#[cfg(feature = "sieve")]
69mod sieve;
70#[cfg(feature = "sieve")]
71pub use sieve::{JMAP_SIEVE_SCRIPTS_URI, SieveAccountCapability, SieveCapability, SieveScript};
72
73#[cfg(feature = "sieve")]
74pub use backend::SieveScriptProperty;
75pub use backend::{
76    EmailProperty, EmailSubmissionProperty, IdentityProperty, MailboxProperty,
77    SearchSnippetProperty, ThreadProperty, VacationResponseProperty,
78};
79pub use capability::{
80    JMAP_MAIL_URI, JMAP_SUBMISSION_URI, JMAP_VACATIONRESPONSE_URI, MailAccountCapability,
81    MailCapability, SubmissionAccountCapability, SubmissionCapability, VacationResponseCapability,
82};
83pub use email::{
84    Email, EmailAddress, EmailAddressGroup, EmailBodyPart, EmailBodyValue, EmailHeader,
85};
86pub use identity::Identity;
87pub use keyword::{
88    ANSWERED, DRAFT, FLAGGED, FORWARDED, JUNK, Keyword, KeywordError, NOT_JUNK, PHISHING, SEEN,
89};
90pub use mailbox::{Mailbox, MailboxFilterCondition, MailboxRights, MailboxRole};
91pub use query::{
92    ComparatorProperty, EmailComparator, EmailFilter, EmailFilterCondition,
93    EmailSubmissionComparator, EmailSubmissionComparatorProperty, EmailSubmissionFilter, Filter,
94    FilterOperator, MailboxComparator, MailboxComparatorProperty, MailboxFilter, Operator,
95    SieveScriptComparator, SieveScriptComparatorProperty,
96};
97pub use snippet::{SearchSnippet, SearchSnippetGetResponse};
98pub use submission::{
99    Address, Delivered, DeliveryStatus, Displayed, EmailSubmission, EmailSubmissionFilterCondition,
100    Envelope, UndoStatus,
101};
102pub use thread::Thread;
103pub use vacation::VacationResponse;