Skip to main content

ComparatorProperty

Enum ComparatorProperty 

Source
#[non_exhaustive]
pub enum ComparatorProperty { ReceivedAt, Size, From, To, Subject, SentAt, HasKeyword, AllInThreadHaveKeyword, SomeInThreadHaveKeyword, Other(String), }
Expand description

The property to sort by in an EmailComparator (RFC 8621 §4.4.2).

When the variant is HasKeyword, AllInThreadHaveKeyword, or SomeInThreadHaveKeyword, the keyword field on EmailComparator MUST also be set (RFC 8621 §4.4.2).

Unknown property names from the server are preserved in Other so they round-trip correctly.

§Excluded from extras preservation

This enum is out of scope for the workspace extras-preservation policy: it is a control enum that backends must dispatch on to determine the sort order, so a generic catch-all variant would be meaningless for query execution. The Other(String) variant that ComparatorProperty does carry exists only to preserve unknown property names for client-side round-tripping; servers cannot meaningfully sort by an unrecognised property without a registered extension.

More broadly, filter / comparator algebra is excluded because unrecognised clauses are a query-correctness hazard: silently dropping or round-tripping a clause the server does not understand can return the wrong set of records to the client without any error signal.

§What to do instead

IETF-track path. Vendors who need both capability-level declaration and filterability for custom fields should use draft-ietf-jmap-metadata (capability URI urn:ietf:params:jmap:metadata), which defines a filterable Metadata / Annotation companion object. Implemented in jmap-metadata-types, jmap-metadata-server, and jmap-metadata-client (bd JMAP-06zp).

Pre-IETF escape. Vendors who cannot wait for the metadata draft can either escape to serde_json::Value or fork the per-crate FilterCondition / ComparatorProperty types. See crate-jmap-calendars-types/PLAN.md for the hybrid sloppy-value pattern.

Cross-reference: bd JMAP-lbdy “Decision: filter algebra excluded”.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

ReceivedAt

Sort by receivedAt.

§

Size

Sort by message size in octets.

§

From

Sort by the text of the From header field.

§

To

Sort by the text of the To header field.

§

Subject

Sort by the decoded Subject.

§

SentAt

Sort by sentAt.

§

HasKeyword

Sort by whether Emails in the Thread have the given keyword.

§

AllInThreadHaveKeyword

Sort by whether all Emails in the Thread have the given keyword.

§

SomeInThreadHaveKeyword

Sort by whether some Emails in the Thread have the given keyword.

§

Other(String)

A server-extension property name not listed above.

Trait Implementations§

Source§

impl Clone for ComparatorProperty

Source§

fn clone(&self) -> ComparatorProperty

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ComparatorProperty

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for ComparatorProperty

Source§

fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for ComparatorProperty

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Eq for ComparatorProperty

Source§

impl Hash for ComparatorProperty

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ComparatorProperty

Source§

fn eq(&self, other: &ComparatorProperty) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for ComparatorProperty

Source§

fn serialize<S: Serializer>(&self, s: S) -> Result<S::Ok, S::Error>

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for ComparatorProperty

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.