#[non_exhaustive]pub struct ContactCardComparator {
pub property: String,
pub is_ascending: bool,
pub collation: Option<String>,
}Expand description
Comparator for ContactCard/query sort order (RFC 9610 §3.3.2).
The property field holds the sort key string. RFC 9610 §3.3.2 declares
a small required + recommended set; const identifiers are exposed in
prop for spelling-safe call sites:
- Required:
"created","updated"(prop::CREATED,prop::UPDATED). - Recommended:
"name/given","name/surname","name/surname2"(prop::NAME_GIVEN,prop::NAME_SURNAME,prop::NAME_SURNAME2).
The property type stays String to preserve forward-compat with
server-specific sort keys and with future RFC additions (the workspace
filter-algebra exclusion blocks a typed-enum-with-Other(String)
shape; see ContactCardFilterCondition).
§Default impl divergence
ContactCardComparator::default() produces
is_ascending: false because bool::default() is false. The
wire-default for an absent isAscending key is true —
#[serde(default = "default_ascending")] (RFC 8620 §5.5). A caller
who writes
let mut c = ContactCardComparator::default();
c.property = "created".into();and submits the comparator gets descending sort silently — the
Rust API default does not match the wire-format default semantic.
This is the same class of footgun as ContactCard::default()
producing a wire-invalid {} (JMAP-glx8.16), but more dangerous
because the result looks valid and just returns the wrong record
order. Always set is_ascending explicitly when constructing a
comparator from Default::default(). JMAP-glx8.22.
§Excluded from extras preservation
This type is out of scope for the workspace extras-preservation
policy: it carries no flatten-extras extra field, and its property
field is consumed by backend dispatch to determine sort order. See
ContactCardFilterCondition for the rationale and for the two
recommended paths (draft-ietf-jmap-metadata, bd JMAP-06zp; or the
pre-IETF sloppy-value escape).
Cross-reference: bd JMAP-lbdy “Decision: filter algebra excluded”.
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.property: StringSort key string.
is_ascending: boolSort direction; true = ascending (wire-default per RFC 8620
§5.5), false = descending.
Default::default() produces false — see the
ContactCardComparator type-level “Default impl divergence”
note. JMAP-glx8.22.
collation: Option<String>Optional collation identifier (RFC 4790).