Skip to main content

GuaranteeSet

Struct GuaranteeSet 

Source
pub struct GuaranteeSet {
    pub delivery: Delivery,
    pub acknowledgement: Acknowledgement,
    pub durability: Option<Durability>,
    pub replicas: Option<u64>,
    pub ordering: OrderingMode,
    pub deduplication: Deduplication,
    pub dedup_window_ms: Option<u64>,
    pub backpressure: Backpressure,
    pub producer_naming: ProducerNaming,
    pub control_isolated: bool,
}
Expand description

One level per guarantee dimension, as declared in HELLO keys 5 and 6 (docs/PROTOCOL.md §6.5).

GuaranteeSet::CORE is the default set and is exactly what v0 does, so an absent HELLO key, an empty map and CORE are the same statement (decisions/0006 §4.2). Every field is a small Copy value: a set costs no allocation, which is what lets it ride a header a peer controls.

Fields§

§delivery: Delivery

Delivery dimension.

§acknowledgement: Acknowledgement

Acknowledgement/completion dimension.

§durability: Option<Durability>

Persistence axis; legal only with Stored or Replicated.

§replicas: Option<u64>

Replica count, leader included; legal only with Replicated, and ≥ 2.

§ordering: OrderingMode

Ordering dimension.

§deduplication: Deduplication

Deduplication dimension.

§dedup_window_ms: Option<u64>

Dedup window; required with Bounded, forbidden otherwise.

§backpressure: Backpressure

Backpressure behaviour. Not ordered.

§producer_naming: ProducerNaming

How the producer of a sequenced transfer is named. Not ordered.

§control_isolated: bool

Whether control traffic is isolated from bulk traffic (decisions/0002 §6.1). Ordered: true is strictly stronger.

Implementations§

Source§

impl GuaranteeSet

Source

pub const CORE: GuaranteeSet

The default set: what v0 offers and requires.

Source

pub fn is_core(&self) -> bool

Is this the default set? A core declaration is never written: it is what an absent key already means.

Source

pub fn intersect( &self, other: &GuaranteeSet, ) -> Result<GuaranteeSet, &'static str>

The weaker of two offered sets, dimension by dimension (docs/PROTOCOL.md §2.3 step 5).

Ladders take the minimum. Dimensions that are not ordered — backpressure, producer naming, and the two independent axes of a durability level — have no “weaker”, so the two declarations must be equal; the name of the dimension comes back as the error so a peer can be told which one disagreed.

Source

pub fn reaches(&self, required: &GuaranteeSet) -> bool

Does this set reach required on every dimension?

Ladders compare by level, the durability axes compare per axis, and the unordered dimensions must match exactly. A longer dedup window is the stronger promise.

Trait Implementations§

Source§

impl Clone for GuaranteeSet

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for GuaranteeSet

Source§

impl Debug for GuaranteeSet

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for GuaranteeSet

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl Eq for GuaranteeSet

Source§

impl PartialEq for GuaranteeSet

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for GuaranteeSet

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.