#[non_exhaustive]pub enum CompensationHint {
UniqueViolation {
field: String,
conflicting_value: String,
},
ForeignKeyMissing {
referenced_id: String,
},
PermissionDenied,
RateLimited {
retry_after_ms: u64,
},
SchemaViolation {
field: String,
reason: String,
},
Custom {
constraint: String,
detail: String,
},
IntegrityViolation,
Retry {
retry_after_ms: u64,
},
}Expand description
Typed compensation hint sent from Origin to edge when a delta is rejected.
The edge’s CompensationHandler receives this and can programmatically
decide how to react (prompt user, auto-retry with suffix, silently merge).
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
UniqueViolation
UNIQUE constraint violated — another device wrote the same value first.
Fields
ForeignKeyMissing
Foreign key reference missing — the referenced entity doesn’t exist.
PermissionDenied
Permission denied — the user doesn’t have write access. No details are leaked (security: the edge is untrusted).
RateLimited
Rate limit exceeded — try again later.
SchemaViolation
Schema violation — the delta doesn’t conform to the collection schema.
Custom
Custom application-defined constraint violation.
Fields
IntegrityViolation
Data integrity violation — CRC32C checksum mismatch on delta payload. The client should re-send the delta.
Retry
Transient rejection — the delta was admitted against a constraint version not yet installed on the accepting replica. Not a failure: re-push the delta as a new sequence after the suggested delay.
Implementations§
Trait Implementations§
Source§impl Archive for CompensationHint
impl Archive for CompensationHint
Source§type Archived = ArchivedCompensationHint
type Archived = ArchivedCompensationHint
Source§type Resolver = CompensationHintResolver
type Resolver = CompensationHintResolver
Source§fn resolve(
&self,
resolver: <Self as Archive>::Resolver,
out: Place<<Self as Archive>::Archived>,
)
fn resolve( &self, resolver: <Self as Archive>::Resolver, out: Place<<Self as Archive>::Archived>, )
Source§const COPY_OPTIMIZATION: CopyOptimization<Self> = _
const COPY_OPTIMIZATION: CopyOptimization<Self> = _
serialize. Read moreSource§impl Clone for CompensationHint
impl Clone for CompensationHint
Source§fn clone(&self) -> CompensationHint
fn clone(&self) -> CompensationHint
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 CompensationHint
impl Debug for CompensationHint
Source§impl<'de> Deserialize<'de> for CompensationHint
impl<'de> Deserialize<'de> for CompensationHint
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<__D: Fallible + ?Sized> Deserialize<CompensationHint, __D> for Archived<CompensationHint>
impl<__D: Fallible + ?Sized> Deserialize<CompensationHint, __D> for Archived<CompensationHint>
Source§fn deserialize(
&self,
deserializer: &mut __D,
) -> Result<CompensationHint, <__D as Fallible>::Error>
fn deserialize( &self, deserializer: &mut __D, ) -> Result<CompensationHint, <__D as Fallible>::Error>
Source§impl Display for CompensationHint
impl Display for CompensationHint
impl Eq for CompensationHint
Source§impl<'__msgpack_de> FromMessagePack<'__msgpack_de> for CompensationHint
impl<'__msgpack_de> FromMessagePack<'__msgpack_de> for CompensationHint
Source§impl PartialEq for CompensationHint
impl PartialEq for CompensationHint
Source§impl Serialize for CompensationHint
impl Serialize for CompensationHint
impl StructuralPartialEq for CompensationHint
Auto Trait Implementations§
impl Freeze for CompensationHint
impl RefUnwindSafe for CompensationHint
impl Send for CompensationHint
impl Sync for CompensationHint
impl Unpin for CompensationHint
impl UnsafeUnpin for CompensationHint
impl UnwindSafe for CompensationHint
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> ArchiveUnsized for Twhere
T: Archive,
impl<T> ArchiveUnsized for Twhere
T: Archive,
Source§type Archived = <T as Archive>::Archived
type Archived = <T as Archive>::Archived
Archive, it may be
unsized. Read moreSource§fn archived_metadata(
&self,
) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
fn archived_metadata( &self, ) -> <<T as ArchiveUnsized>::Archived as ArchivePointee>::ArchivedMetadata
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<T> FromMessagePackOwned for Twhere
T: for<'a> FromMessagePack<'a>,
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> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Scalar for T
Source§impl<T, S> SerializeUnsized<S> for T
impl<T, S> SerializeUnsized<S> for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.