Skip to main content

Child

Struct Child 

Source
pub struct Child<P: Protocol> { /* private fields */ }
Expand description

A protocol owned by another, with the inbox its indications are collected into.

Implementations§

Source§

impl<P: Protocol> Child<P>

Source

pub fn new(proto: P) -> Self

Source

pub fn replace(&mut self, proto: P)

Replace the protocol, keeping the inbox’s allocation.

For a child that is rebuilt while running — the leader-driven consensus replaces its epoch consensus on every epoch change.

Source

pub fn reclaim(&mut self, inbox: Vec<P::Ind>)

Put the inbox back after the indications run returned have been handled.

Source§

impl<P> Child<P>
where P: Protocol<Meta = Infallible, Entry = Infallible>,

Source

pub fn run<M, I, Me, En>( &mut self, cx: &mut Cx<'_, M, I, P::Note, Me, En>, wrap: impl Fn(P::Msg) -> M, f: impl FnOnce(&mut P, &mut ProtoCx<'_, P>), ) -> Vec<P::Ind>

Run f against the child, forwarding what it sends as wrap(msg) and returning what it indicated for the parent to handle. Hand the returned inbox to Child::reclaim once done.

The child is handed no store — see Cx::with_child_consuming. A child that keeps something durably is run with Child::run_durable instead.

Source§

impl<P> Child<P>
where P: Protocol<Entry = Infallible>,

Source

pub fn run_durable<M, I, Me, En>( &mut self, cx: &mut Cx<'_, M, I, P::Note, Me, En>, wrap: impl Fn(P::Msg) -> M, slot: Slot<Me, P::Meta>, f: impl FnOnce(&mut P, &mut ProtoCx<'_, P>), ) -> Vec<P::Ind>

Child::run, for a child that keeps durable metadata in slot of the parent’s record.

See Cx::with_durable_child_consuming for why the write is one and not two.

Source§

impl<P: Protocol> Child<P>

Source

pub fn run_keyed<M, I, Me, En, K>( &mut self, cx: &mut Cx<'_, M, I, P::Note, Me, En>, wrap: impl Fn(P::Msg) -> M, slot: KeyedSlot<Me, P::Meta, K>, key: K, f: impl FnOnce(&mut P, &mut ProtoCx<'_, P>), ) -> Vec<P::Ind>
where P: Protocol<Entry = Infallible>,

Child::run_durable, for one member of a family of durable children.

See Cx::with_keyed_durable_child_consuming.

Source

pub fn run_appending<M, I, Me, En>( &mut self, cx: &mut Cx<'_, M, I, P::Note, Me, En>, wrap: impl Fn(P::Msg) -> M, slot: Slot<Me, P::Meta>, entries: SeqSlot<En, P::Entry>, f: impl FnOnce(&mut P, &mut ProtoCx<'_, P>), ) -> Vec<P::Ind>

Child::run_durable, for a child that keeps metadata and appends.

See Cx::with_durable_child: the child’s entries go into the parent’s one sequence, so the order between a parent’s entry and its child’s is real rather than invented at recovery.

Trait Implementations§

Source§

impl<P: Protocol + Debug> Debug for Child<P>

Shows the protocol. The inbox is empty between events, and its element type need not be Debug for the parent to be.

Source§

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

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

impl<P: Protocol> Deref for Child<P>

Source§

type Target = P

The resulting type after dereferencing.
Source§

fn deref(&self) -> &P

Dereferences the value.
Source§

impl<P: Protocol> DerefMut for Child<P>

Source§

fn deref_mut(&mut self) -> &mut P

Mutably dereferences the value.

Auto Trait Implementations§

§

impl<P> Freeze for Child<P>
where P: Freeze,

§

impl<P> RefUnwindSafe for Child<P>

§

impl<P> Send for Child<P>
where P: Send, <P as Protocol>::Ind: Send,

§

impl<P> Sync for Child<P>
where P: Sync, <P as Protocol>::Ind: Sync,

§

impl<P> Unpin for Child<P>
where P: Unpin, <P as Protocol>::Ind: Unpin,

§

impl<P> UnsafeUnpin for Child<P>
where P: UnsafeUnpin,

§

impl<P> UnwindSafe for Child<P>
where P: UnwindSafe, <P as Protocol>::Ind: UnwindSafe,

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CryptoRng for T
where T: DerefMut, <T as Deref>::Target: CryptoRng,

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.

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<R> Rng for R
where R: RngCore + ?Sized,

Source§

fn random<T>(&mut self) -> T

Return a random value via the StandardUniform distribution. Read more
Source§

fn random_iter<T>(self) -> Iter<StandardUniform, Self, T>

Return an iterator over random variates Read more
Source§

fn random_range<T, R>(&mut self, range: R) -> T
where T: SampleUniform, R: SampleRange<T>,

Generate a random value in the given range. Read more
Source§

fn random_bool(&mut self, p: f64) -> bool

Return a bool with a probability p of being true. Read more
Source§

fn random_ratio(&mut self, numerator: u32, denominator: u32) -> bool

Return a bool with a probability of numerator/denominator of being true. Read more
Source§

fn sample<T, D>(&mut self, distr: D) -> T
where D: Distribution<T>,

Sample a new value, using the given distribution. Read more
Source§

fn sample_iter<T, D>(self, distr: D) -> Iter<D, Self, T>
where D: Distribution<T>, Self: Sized,

Create an iterator that generates values using the given distribution. Read more
Source§

fn fill<T>(&mut self, dest: &mut T)
where T: Fill + ?Sized,

Fill any type implementing Fill with random data Read more
Source§

fn gen<T>(&mut self) -> T

👎Deprecated since 0.9.0:

Renamed to random to avoid conflict with the new gen keyword in Rust 2024.

Alias for Rng::random.
Source§

fn gen_range<T, R>(&mut self, range: R) -> T
where T: SampleUniform, R: SampleRange<T>,

👎Deprecated since 0.9.0:

Renamed to random_range

Source§

fn gen_bool(&mut self, p: f64) -> bool

👎Deprecated since 0.9.0:

Renamed to random_bool

Alias for Rng::random_bool.
Source§

fn gen_ratio(&mut self, numerator: u32, denominator: u32) -> bool

👎Deprecated since 0.9.0:

Renamed to random_ratio

Source§

impl<T> RngCore for T
where T: DerefMut, <T as Deref>::Target: RngCore,

Source§

fn next_u32(&mut self) -> u32

Return the next random u32. Read more
Source§

fn next_u64(&mut self) -> u64

Return the next random u64. Read more
Source§

fn fill_bytes(&mut self, dst: &mut [u8])

Fill dest with random data. Read more
Source§

impl<R> TryCryptoRng for R
where R: CryptoRng + ?Sized,

Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<R> TryRngCore for R
where R: RngCore + ?Sized,

Source§

type Error = Infallible

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

fn try_next_u32(&mut self) -> Result<u32, <R as TryRngCore>::Error>

Return the next random u32.
Source§

fn try_next_u64(&mut self) -> Result<u64, <R as TryRngCore>::Error>

Return the next random u64.
Source§

fn try_fill_bytes( &mut self, dst: &mut [u8], ) -> Result<(), <R as TryRngCore>::Error>

Fill dest entirely with random data.
Source§

fn unwrap_err(self) -> UnwrapErr<Self>
where Self: Sized,

Wrap RNG with the UnwrapErr wrapper.
Source§

fn unwrap_mut(&mut self) -> UnwrapMut<'_, Self>

Wrap RNG with the UnwrapMut wrapper.
Source§

fn read_adapter(&mut self) -> RngReadAdapter<'_, Self>
where Self: Sized,

Convert an RngCore to a RngReadAdapter.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V