#[non_exhaustive]pub struct ImapMetadata {
pub id: Option<Id>,
pub related_type: Option<String>,
pub related_id: Id,
pub is_private: Option<bool>,
pub metadata: BTreeMap<String, String>,
pub extra: Map<String, Value>,
}Expand description
IMAP-METADATA-extension mapping (draft-ietf-jmap-metadata-01 §2.1.2).
The @type wire value is "ImapMetadata"; it is supplied by the enclosing
Metadata tag and does NOT appear as a field on this struct.
§relatedType constraint
Per §2.1.2 relatedType MUST be "Mailbox". Servers MUST reject other
values with an invalidProperties SetError. This crate does not enforce
the constraint at the type level — that is the server’s responsibility.
§metadata key semantics
Per §2.2.2.1 the keys are IMAP metadata entry names with the
"/private/" or "/shared/" prefix stripped. The interpretation
depends on is_private: keys map under /private/
when true, under /shared/ otherwise.
An empty-string value is permitted and represents an IMAP entry that exists with no value (§2.2.2.1).
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.id: Option<Id>Server-assigned identifier. Absent on create requests.
JMAP type name of the related object. MUST be "Mailbox" per §2.1.2.
Mandatory per §2.2.1.3 on full Metadata objects, but omittable in
the §4.1 extended-/get partial-response shape. None indicates
the wire input omitted the field; consumers MAY infer
"Mailbox" from the variant (the spec fixes this association).
Callers constructing an ImapMetadata for Metadata/set MUST
populate this field with "Mailbox".
Identifier of the related JMAP Mailbox object.
is_private: Option<bool>Whether this metadata is private to the authenticated user. Selects
the /private/ (true) vs /shared/ (false or absent) IMAP
namespace prefix per §2.1.2 and §2.2.2.1.
metadata: BTreeMap<String, String>IMAP metadata entries. Keys are entry names with the
/private/ or /shared/ prefix stripped (§2.2.2.1). Empty-string
values represent entries that exist but have no value.
Uses BTreeMap for deterministic key ordering on serialise. The
spec does not require a specific ordering; deterministic output is
preferred for round-trip preservation tests and reproducible
builds. The wire format is Map<String, String> either way.
extra: Map<String, Value>Catch-all for vendor / site / private extension fields not covered by the typed fields above. Preserves unknown fields across deserialize/serialize round-trip per workspace extras-preservation policy (see workspace AGENTS.md).