#[repr(i32)]pub enum IntentKind {
SendMessage = 1,
KeyUpdate = 2,
MetadataUpdate = 3,
UpdateGroupMembership = 4,
UpdateAdminList = 5,
UpdatePermission = 6,
ReaddInstallations = 7,
ProposeMemberUpdate = 8,
ProposeGroupContextExtensions = 9,
CommitPendingProposals = 10,
BootstrapMigration = 11,
AppDataUpdate = 12,
}Variants§
SendMessage = 1
KeyUpdate = 2
MetadataUpdate = 3
UpdateGroupMembership = 4
UpdateAdminList = 5
UpdatePermission = 6
ReaddInstallations = 7
ProposeMemberUpdate = 8
ProposeGroupContextExtensions = 9
CommitPendingProposals = 10
BootstrapMigration = 11
One-time bootstrap commit that flips a group from the legacy
GroupContextExtensions-backed metadata layout onto the AppData
dictionary. Distinct from Self::ProposeGroupContextExtensions
because the payload shape is different (it bundles a GCE proposal
with a fan-out of AppDataUpdate proposals) and because the
dispatch path in mls_sync needs an explicit marker rather than
sniffing the extension-set shape.
AppDataUpdate = 12
Generic AppData component write. The intent payload carries a
(component_id, AppDataUpdateOp) pair where AppDataUpdateOp is
either Replace(bytes) (full-replace components — Bytes / String
types) or DeltaWithBase { pre, post } (TlsMap / TlsSet types,
where the handler computes the residual delta at commit time from
the current state, the pre value, and the post value).
Replaces the proliferation of per-component IntentKinds. Existing
typed intents (UpdateAdminList, UpdatePermission,
MetadataUpdate) are not migrated by the introducing PR — they
continue to work, and a follow-on can fold them in.
Implementations§
Source§impl IntentKind
impl IntentKind
Sourcepub fn all() -> impl Iterator<Item = IntentKind>
pub fn all() -> impl Iterator<Item = IntentKind>
Every kind this build knows how to deserialize, as a lazy
iterator — collect into a Vec only where a filter needs one.
Production queries pass these as the allowed_kinds filter so
rows written by a NEWER build (which may use discriminants this
build has no variant for) are excluded in SQL instead of
poisoning the whole load() — FromSql errors on unknown
discriminants, and one such row would otherwise wedge every
intent query for the group after an app downgrade. Unknown-kind
rows stay untouched in the table and resume processing when the
app is upgraded again.
Exhaustive by construction: strum::EnumIter generates the
iteration over every variant, so a newly added IntentKind is
included automatically — which is exactly right here, since every
variant is, by definition, a kind this build can deserialize.
Trait Implementations§
Source§impl<'__expr> AsExpression<Integer> for &'__expr IntentKind
impl<'__expr> AsExpression<Integer> for &'__expr IntentKind
Source§type Expression = Bound<Integer, &'__expr IntentKind>
type Expression = Bound<Integer, &'__expr IntentKind>
Source§fn as_expression(self) -> <Self as AsExpression<Integer>>::Expression
fn as_expression(self) -> <Self as AsExpression<Integer>>::Expression
Source§impl AsExpression<Integer> for IntentKind
impl AsExpression<Integer> for IntentKind
Source§type Expression = Bound<Integer, IntentKind>
type Expression = Bound<Integer, IntentKind>
Source§fn as_expression(self) -> <Self as AsExpression<Integer>>::Expression
fn as_expression(self) -> <Self as AsExpression<Integer>>::Expression
Source§impl<'__expr> AsExpression<Nullable<Integer>> for &'__expr IntentKind
impl<'__expr> AsExpression<Nullable<Integer>> for &'__expr IntentKind
Source§type Expression = Bound<Nullable<Integer>, &'__expr IntentKind>
type Expression = Bound<Nullable<Integer>, &'__expr IntentKind>
Source§fn as_expression(self) -> <Self as AsExpression<Nullable<Integer>>>::Expression
fn as_expression(self) -> <Self as AsExpression<Nullable<Integer>>>::Expression
Source§impl AsExpression<Nullable<Integer>> for IntentKind
impl AsExpression<Nullable<Integer>> for IntentKind
Source§type Expression = Bound<Nullable<Integer>, IntentKind>
type Expression = Bound<Nullable<Integer>, IntentKind>
Source§fn as_expression(self) -> <Self as AsExpression<Nullable<Integer>>>::Expression
fn as_expression(self) -> <Self as AsExpression<Nullable<Integer>>>::Expression
Source§impl Clone for IntentKind
impl Clone for IntentKind
Source§fn clone(&self) -> IntentKind
fn clone(&self) -> IntentKind
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 IntentKind
impl Debug for IntentKind
Source§impl<'de> Deserialize<'de> for IntentKind
impl<'de> Deserialize<'de> for IntentKind
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for IntentKind
impl Display for IntentKind
Source§impl FromSql<Integer, Sqlite> for IntentKind
impl FromSql<Integer, Sqlite> for IntentKind
Source§impl IntoEnumIterator for IntentKind
impl IntoEnumIterator for IntentKind
type Iterator = IntentKindIter
fn iter() -> IntentKindIter ⓘ
Source§impl PartialEq for IntentKind
impl PartialEq for IntentKind
Source§fn eq(&self, other: &IntentKind) -> bool
fn eq(&self, other: &IntentKind) -> bool
self and other values to be equal, and is used by ==.Source§impl<__DB, __ST> Queryable<__ST, __DB> for IntentKindwhere
__DB: Backend,
__ST: SingleValue,
Self: FromSql<__ST, __DB>,
impl<__DB, __ST> Queryable<__ST, __DB> for IntentKindwhere
__DB: Backend,
__ST: SingleValue,
Self: FromSql<__ST, __DB>,
Source§impl Serialize for IntentKind
impl Serialize for IntentKind
Source§impl ToSql<Integer, Sqlite> for IntentKind
impl ToSql<Integer, Sqlite> for IntentKind
Source§impl<__DB> ToSql<Nullable<Integer>, __DB> for IntentKindwhere
__DB: Backend,
Self: ToSql<Integer, __DB>,
impl<__DB> ToSql<Nullable<Integer>, __DB> for IntentKindwhere
__DB: Backend,
Self: ToSql<Integer, __DB>,
impl Copy for IntentKind
impl Eq for IntentKind
impl StructuralPartialEq for IntentKind
Auto Trait Implementations§
impl Freeze for IntentKind
impl RefUnwindSafe for IntentKind
impl Send for IntentKind
impl Sync for IntentKind
impl Unpin for IntentKind
impl UnsafeUnpin for IntentKind
impl UnwindSafe for IntentKind
Blanket Implementations§
§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read more§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL modifier for aggregate functions Read more§fn aggregate_filter<P>(self, f: P) -> Self::Outputwhere
P: AsExpression<Bool>,
Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,
fn aggregate_filter<P>(self, f: P) -> Self::Outputwhere
P: AsExpression<Bool>,
Self: FilterDsl<<P as AsExpression<Bool>>::Expression>,
§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T, ST, DB> FromSqlRow<ST, DB> for Twhere
T: Queryable<ST, DB>,
ST: SqlTypeOrSelectable,
DB: Backend,
<T as Queryable<ST, DB>>::Row: FromStaticSqlRow<ST, DB>,
impl<T, ST, DB> FromSqlRow<ST, DB> for Twhere
T: Queryable<ST, DB>,
ST: SqlTypeOrSelectable,
DB: Backend,
<T as Queryable<ST, DB>>::Row: FromStaticSqlRow<ST, DB>,
§impl<T, ST, DB> FromStaticSqlRow<ST, DB> for Twhere
DB: Backend,
T: FromSql<ST, DB>,
ST: SingleValue,
impl<T, ST, DB> FromStaticSqlRow<ST, DB> for Twhere
DB: Backend,
T: FromSql<ST, DB>,
ST: SingleValue,
§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> IntoSql for T
impl<T> IntoSql for T
§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].