pub enum ExclusionProof<K: Array, V: FixedValue, D: Digest, const N: usize> {
KeyValue(OperationProof<D, N>, Update<K, V>),
Commit(OperationProof<D, N>, Option<V>),
}Expand description
Proof that a key has no assigned value in the database.
When the database has active keys, exclusion is proven by showing the key falls within a span between two adjacent active keys. Otherwise exclusion is proven by showing the database contains no active keys through the most recent commit operation.
Verify using Db::verify_exclusion_proof.
Variants§
KeyValue(OperationProof<D, N>, Update<K, V>)
Proves that two keys are active in the database and adjacent to each other in the key ordering. Any key falling between them (non-inclusively) can be proven excluded.
Commit(OperationProof<D, N>, Option<V>)
Proves that the database has no active keys, allowing any key to be proven excluded. Specifically, the proof establishes the most recent Commit operation has an activity floor equal to its own location, which is a necessary and sufficient condition for an empty database.
Trait Implementations§
Source§impl<K: Clone + Array, V: Clone + FixedValue, D: Clone + Digest, const N: usize> Clone for ExclusionProof<K, V, D, N>
impl<K: Clone + Array, V: Clone + FixedValue, D: Clone + Digest, const N: usize> Clone for ExclusionProof<K, V, D, N>
Source§fn clone(&self) -> ExclusionProof<K, V, D, N>
fn clone(&self) -> ExclusionProof<K, V, D, N>
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<K: Debug + Array, V: Debug + FixedValue, D: Debug + Digest, const N: usize> Debug for ExclusionProof<K, V, D, N>
impl<K: Debug + Array, V: Debug + FixedValue, D: Debug + Digest, const N: usize> Debug for ExclusionProof<K, V, D, N>
Source§impl<K: PartialEq + Array, V: PartialEq + FixedValue, D: PartialEq + Digest, const N: usize> PartialEq for ExclusionProof<K, V, D, N>
impl<K: PartialEq + Array, V: PartialEq + FixedValue, D: PartialEq + Digest, const N: usize> PartialEq for ExclusionProof<K, V, D, N>
impl<K: Eq + Array, V: Eq + FixedValue, D: Eq + Digest, const N: usize> Eq for ExclusionProof<K, V, D, N>
impl<K: Array, V: FixedValue, D: Digest, const N: usize> StructuralPartialEq for ExclusionProof<K, V, D, N>
Auto Trait Implementations§
impl<K, V, D, const N: usize> Freeze for ExclusionProof<K, V, D, N>
impl<K, V, D, const N: usize> RefUnwindSafe for ExclusionProof<K, V, D, N>
impl<K, V, D, const N: usize> Send for ExclusionProof<K, V, D, N>where
V: Send,
impl<K, V, D, const N: usize> Sync for ExclusionProof<K, V, D, N>where
V: Sync,
impl<K, V, D, const N: usize> Unpin for ExclusionProof<K, V, D, N>
impl<K, V, D, const N: usize> UnwindSafe for ExclusionProof<K, V, D, N>
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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