jmap-mail-types 0.4.0

RFC 8621 JMAP for Mail data types (Mailbox, Thread, Email, Identity, EmailSubmission, SearchSnippet)
Documentation
//! RFC 8621 JMAP for Mail data types.
//!
//! Provides [`Email`], [`Mailbox`], [`Thread`], [`Identity`], [`EmailSubmission`],
//! and [`SearchSnippet`] — the core object types defined by
//! [RFC 8621](https://www.rfc-editor.org/rfc/rfc8621).
//!
//! This crate is types-only: no method handlers, no async, no network I/O.
//! It sits between `jmap-types` (shared wire primitives) and `jmap-mail-server`
//! (method handlers).
//!
//! All types implement [`serde::Serialize`] and [`serde::Deserialize`] with the
//! camelCase field names required by the JMAP wire format.
//!
//! # Example
//!
//! ```rust
//! use jmap_mail_types::Mailbox;
//!
//! let json = r#"{
//!     "id": "mb1",
//!     "name": "Inbox",
//!     "role": "inbox",
//!     "sortOrder": 10,
//!     "totalEmails": 42,
//!     "unreadEmails": 3,
//!     "totalThreads": 20,
//!     "unreadThreads": 2,
//!     "myRights": {
//!         "mayReadItems": true,
//!         "mayAddItems": true,
//!         "mayRemoveItems": true,
//!         "maySetSeen": true,
//!         "maySetKeywords": true,
//!         "mayCreateChild": true,
//!         "mayRename": true,
//!         "mayDelete": false,
//!         "maySubmit": false
//!     },
//!     "isSubscribed": true
//! }"#;
//!
//! let mailbox: Mailbox = serde_json::from_str(json).unwrap();
//! assert_eq!(mailbox.name, "Inbox");
//! ```

#![forbid(unsafe_code)]

mod backend;
mod capability;
mod email;
mod identity;
mod keyword;
mod mailbox;
mod query;
mod snippet;
mod submission;
mod thread;
mod vacation;

#[cfg(feature = "mdn")]
mod mdn;
#[cfg(feature = "mdn")]
pub use mdn::{
    ActionMode, Disposition, DispositionType, JMAP_MDN_URI, Mdn, MdnParseRequest, MdnParseResponse,
    MdnSendRequest, MdnSendResponse, SendingMode,
};

#[cfg(feature = "sieve")]
mod sieve;
#[cfg(feature = "sieve")]
pub use sieve::{JMAP_SIEVE_SCRIPTS_URI, SieveAccountCapability, SieveCapability, SieveScript};

#[cfg(feature = "sieve")]
pub use backend::SieveScriptProperty;
pub use backend::{
    EmailProperty, EmailSubmissionProperty, IdentityProperty, MailboxProperty,
    SearchSnippetProperty, ThreadProperty, VacationResponseProperty,
};
pub use capability::{
    JMAP_MAIL_URI, JMAP_SUBMISSION_URI, JMAP_VACATIONRESPONSE_URI, MailAccountCapability,
    MailCapability, SubmissionAccountCapability, SubmissionCapability, VacationResponseCapability,
};
pub use email::{
    Email, EmailAddress, EmailAddressGroup, EmailBodyPart, EmailBodyValue, EmailHeader,
};
pub use identity::Identity;
pub use keyword::{
    ANSWERED, DRAFT, FLAGGED, FORWARDED, JUNK, Keyword, KeywordError, NOT_JUNK, PHISHING, SEEN,
};
pub use mailbox::{Mailbox, MailboxFilterCondition, MailboxRights, MailboxRole};
pub use query::{
    ComparatorProperty, EmailComparator, EmailFilter, EmailFilterCondition,
    EmailSubmissionComparator, EmailSubmissionComparatorProperty, EmailSubmissionFilter, Filter,
    FilterOperator, MailboxComparator, MailboxComparatorProperty, MailboxFilter, Operator,
    SieveScriptComparator, SieveScriptComparatorProperty,
};
pub use snippet::{SearchSnippet, SearchSnippetGetResponse};
pub use submission::{
    Address, Delivered, DeliveryStatus, Displayed, EmailSubmission, EmailSubmissionFilterCondition,
    Envelope, UndoStatus,
};
pub use thread::Thread;
pub use vacation::VacationResponse;