pub struct NotificationRule {
pub kind: String,
pub spool: Option<SpoolRef>,
pub actor_origin: String,
pub channel: i32,
pub delivery: i32,
}Expand description
Per-channel stored selector. Empty kind or “*” matches all kinds; empty or
“any” actor_origin matches both “human” and “agent”. CHANNEL_UNSPECIFIED
matches all channels. For each cell walk S, parent, … personal/top-level
root: the nearest level with a matching rule wins, then account, then defaults.
Within a level exact kind > exact channel > exact origin; first rule wins ties.
Use the host’s existing 64/128-node ancestor bound (including S), never an
unbounded walk or string-prefix match. An incomplete/cyclic/over-bound chain
fails closed with FAILED_PRECONDITION / POLICY_DENIED, never account fallback.
The shared system root spool is transparent and MUST NOT hold rules; reject
rules resolving to it with INVALID_ARGUMENT / FIELD_INVALID. Ancestor read
access affects disclosure only, not which rule wins. Remove ALL S-scoped rules
matching a cell to return that cell to inheritance; DISABLED is an override.
Stored DELIVERY_UNSPECIFIED is invalid, never an inherit or disabled sentinel.
IN_APP and PUSH are on/off only (IMMEDIATE or DISABLED). First reject unknown
channels/deliveries and UNSPECIFIED delivery with INVALID_ARGUMENT /
FIELD_INVALID. Next check the email lock: an email rule matching
account_security or security_surface must be IMMEDIATE, regardless of origin
or Spool. Attempts to disable or digest their email, including wildcard rules
and public unsubscribe, are rejected with FAILED_PRECONDITION / POLICY_DENIED
before any write. This lock takes precedence over the email-only DIGEST check:
other DIGEST rules on non-email or wildcard channels are rejected with
INVALID_ARGUMENT / FIELD_INVALID.
Fields§
§kind: String§spool: Option<SpoolRef>§actor_origin: String§channel: i32§delivery: i32Implementations§
Source§impl NotificationRule
impl NotificationRule
Sourcepub fn channel(&self) -> Channel
pub fn channel(&self) -> Channel
Returns the enum value of channel, or the default if the field is set to an invalid enum value.
Sourcepub fn set_channel(&mut self, value: Channel)
pub fn set_channel(&mut self, value: Channel)
Sets channel to the provided enum value.
Sourcepub fn delivery(&self) -> Delivery
pub fn delivery(&self) -> Delivery
Returns the enum value of delivery, or the default if the field is set to an invalid enum value.
Sourcepub fn set_delivery(&mut self, value: Delivery)
pub fn set_delivery(&mut self, value: Delivery)
Sets delivery to the provided enum value.
Trait Implementations§
Source§impl Clone for NotificationRule
impl Clone for NotificationRule
Source§fn clone(&self) -> NotificationRule
fn clone(&self) -> NotificationRule
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for NotificationRule
impl Debug for NotificationRule
Source§impl Default for NotificationRule
impl Default for NotificationRule
Source§fn default() -> NotificationRule
fn default() -> NotificationRule
impl Eq for NotificationRule
Source§impl Hash for NotificationRule
impl Hash for NotificationRule
Source§impl Message for NotificationRule
impl Message for NotificationRule
Source§fn encoded_len(&self) -> usize
fn encoded_len(&self) -> usize
Source§fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
fn encode(&self, buf: &mut impl BufMut) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
fn encode_length_delimited(
&self,
buf: &mut impl BufMut,
) -> Result<(), EncodeError>where
Self: Sized,
Source§fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
fn encode_length_delimited_to_vec(&self) -> Vec<u8> ⓘwhere
Self: Sized,
Source§fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
fn decode_length_delimited(buf: impl Buf) -> Result<Self, DecodeError>where
Self: Default,
Source§fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self. Read moreSource§fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
fn merge_length_delimited(&mut self, buf: impl Buf) -> Result<(), DecodeError>where
Self: Sized,
self.Source§impl PartialEq for NotificationRule
impl PartialEq for NotificationRule
impl StructuralPartialEq for NotificationRule
Auto Trait Implementations§
impl Freeze for NotificationRule
impl RefUnwindSafe for NotificationRule
impl Send for NotificationRule
impl Sync for NotificationRule
impl Unpin for NotificationRule
impl UnsafeUnpin for NotificationRule
impl UnwindSafe for NotificationRule
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more