#[non_exhaustive]pub struct PushSubscriptionPatch<'a> {
pub verification_code: Option<&'a str>,
pub expires: Patch<&'a UTCDate>,
pub types: Option<&'a [&'a str]>,
pub clear_types: bool,
pub chat_push: Option<&'a [(&'a Id, ChatPushConfig)]>,
pub clear_chat_push: bool,
}Expand description
Patch shape for PushSubscription/set update sub-operations (RFC 8620 §7.2.2).
Only the patchable properties are exposed. RFC 8620 §7.2 declares url
and keys immutable: to change those, destroy the subscription and create
a new one. device_client_id is also stable for the lifetime of the
subscription.
Fields left as their default (None / Patch::Keep) are omitted from
the wire patch and the server leaves the corresponding property unchanged.
The chat_push patch follows the JMAP Chat Push extension
(draft-atwood-jmap-chat-push-00 §3.1): callers pass Some(slice) to
replace the full chatPush property, or Patch::Clear semantics via
the dedicated clear_chat_push flag to set it to JSON null. The
extension does not define per-key patching, so the value is set
wholesale.
§Debug redaction
verification_code is the RFC 8620 §7.2 push-subscription-ownership
proof — an attacker who learns the value can claim ownership of the
subscription. The Debug impl on this struct redacts it to
Some("[REDACTED]") / None so an accidental {:?}-format in an
application log, tracing span, or test fixture cannot leak it. Other
fields are not secrets and are rendered verbatim.
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.verification_code: Option<&'a str>Replace the verification code (set after receiving a PushVerification
payload). None = no change.
RFC 8620 §7.2 ownership proof — redacted by the
std::fmt::Debug impl on this struct.
expires: Patch<&'a UTCDate>Set or clear the expiry timestamp. Patch::Clear sets expires to
null; the server SHOULD then choose a default expiry per RFC 8620 §7.2.
types: Option<&'a [&'a str]>Replace the types filter. None = no change. To set the property
to null (deliver all types), use clear_types: true.
clear_types: boolWhen true, set types to JSON null (deliver all types). Mutually
exclusive with types: Some(_) — providing both is rejected as
InvalidArgument.
chat_push: Option<&'a [(&'a Id, ChatPushConfig)]>Replace the chatPush extension property wholesale. None = no change.
clear_chat_push: boolWhen true, set chatPush to JSON null (remove all inline push).
Mutually exclusive with chat_push: Some(_).