pub enum ExclusionProof<F: Graftable, K: Key, V: ValueEncoding, D: Digest, const N: usize> {
KeyValue(OperationProof<F, D, N>, Update<K, V>),
Commit(OperationProof<F, D, N>, Option<V::Value>),
}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<F, 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<F, D, N>, Option<V::Value>)
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<F: Clone + Graftable, K: Clone + Key, V: Clone + ValueEncoding, D: Clone + Digest, const N: usize> Clone for ExclusionProof<F, K, V, D, N>
impl<F: Clone + Graftable, K: Clone + Key, V: Clone + ValueEncoding, D: Clone + Digest, const N: usize> Clone for ExclusionProof<F, K, V, D, N>
Source§fn clone(&self) -> ExclusionProof<F, K, V, D, N>
fn clone(&self) -> ExclusionProof<F, K, V, D, N>
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<F: Debug + Graftable, K: Debug + Key, V: Debug + ValueEncoding, D: Debug + Digest, const N: usize> Debug for ExclusionProof<F, K, V, D, N>
impl<F: Debug + Graftable, K: Debug + Key, V: Debug + ValueEncoding, D: Debug + Digest, const N: usize> Debug for ExclusionProof<F, K, V, D, N>
Source§impl<F, K, V, D, const N: usize> EncodeSize for ExclusionProof<F, K, V, D, N>
impl<F, K, V, D, const N: usize> EncodeSize for ExclusionProof<F, K, V, D, N>
Source§fn encode_size(&self) -> usize
fn encode_size(&self) -> usize
Source§fn encode_inline_size(&self) -> usize
fn encode_inline_size(&self) -> usize
BufsMut::push
during Write::write_bufs. Used to size the working buffer for inline
writes. Override alongside Write::write_bufs for types where large
Bytes fields go via push; failing to do so will over-allocate.Source§impl<F: PartialEq + Graftable, K: PartialEq + Key, V: PartialEq + ValueEncoding, D: PartialEq + Digest, const N: usize> PartialEq for ExclusionProof<F, K, V, D, N>
impl<F: PartialEq + Graftable, K: PartialEq + Key, V: PartialEq + ValueEncoding, D: PartialEq + Digest, const N: usize> PartialEq for ExclusionProof<F, K, V, D, N>
Source§fn eq(&self, other: &ExclusionProof<F, K, V, D, N>) -> bool
fn eq(&self, other: &ExclusionProof<F, K, V, D, N>) -> bool
self and other values to be equal, and is used by ==.Source§impl<F, K, V, D, const N: usize> Read for ExclusionProof<F, K, V, D, N>
impl<F, K, V, D, const N: usize> Read for ExclusionProof<F, K, V, D, N>
Source§impl<F, K, V, D, const N: usize> Write for ExclusionProof<F, K, V, D, N>
impl<F, K, V, D, const N: usize> Write for ExclusionProof<F, K, V, D, N>
Source§fn write_bufs(&self, buf: &mut impl BufsMut)
fn write_bufs(&self, buf: &mut impl BufsMut)
BufsMut, allowing existing Bytes chunks to be
appended via BufsMut::push instead of written inline. Must encode
to the same format as Write::write. Defaults to Write::write.impl<F: Eq + Graftable, K: Eq + Key, V: Eq + ValueEncoding, D: Eq + Digest, const N: usize> Eq for ExclusionProof<F, K, V, D, N>
impl<F: Graftable, K: Key, V: ValueEncoding, D: Digest, const N: usize> StructuralPartialEq for ExclusionProof<F, K, V, D, N>
Auto Trait Implementations§
impl<F, K, V, D, const N: usize> Freeze for ExclusionProof<F, K, V, D, N>where
K: Freeze,
<V as ValueEncoding>::Value: Freeze,
<F as Graftable>::PendingChunk<D>: Freeze,
D: Freeze,
impl<F, K, V, D, const N: usize> RefUnwindSafe for ExclusionProof<F, K, V, D, N>where
K: RefUnwindSafe,
<V as ValueEncoding>::Value: RefUnwindSafe,
<F as Graftable>::PendingChunk<D>: RefUnwindSafe,
D: RefUnwindSafe,
F: RefUnwindSafe,
impl<F, K, V, D, const N: usize> Send for ExclusionProof<F, K, V, D, N>
impl<F, K, V, D, const N: usize> Sync for ExclusionProof<F, K, V, D, N>
impl<F, K, V, D, const N: usize> Unpin for ExclusionProof<F, K, V, D, N>where
K: Unpin,
<V as ValueEncoding>::Value: Unpin,
<F as Graftable>::PendingChunk<D>: Unpin,
D: Unpin,
F: Unpin,
impl<F, K, V, D, const N: usize> UnsafeUnpin for ExclusionProof<F, K, V, D, N>where
K: UnsafeUnpin,
<V as ValueEncoding>::Value: UnsafeUnpin,
<F as Graftable>::PendingChunk<D>: UnsafeUnpin,
D: UnsafeUnpin,
impl<F, K, V, D, const N: usize> UnwindSafe for ExclusionProof<F, K, V, D, N>where
K: UnwindSafe,
<V as ValueEncoding>::Value: UnwindSafe,
<F as Graftable>::PendingChunk<D>: UnwindSafe,
D: UnwindSafe,
F: UnwindSafe,
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Encode for Twhere
T: Write + EncodeSize,
impl<T> Encode for Twhere
T: Write + EncodeSize,
Source§impl<T> EncodeExt for Twhere
T: EncodeSize + Write,
impl<T> EncodeExt for Twhere
T: EncodeSize + Write,
Source§fn encode_with_pool_mut(&self, pool: &BufferPool) -> IoBufMut
fn encode_with_pool_mut(&self, pool: &BufferPool) -> IoBufMut
Source§fn encode_with_pool(&self, pool: &BufferPool) -> IoBufs
fn encode_with_pool(&self, pool: &BufferPool) -> IoBufs
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<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