Skip to main content

Chain

Struct Chain 

Source
pub struct Chain { /* private fields */ }
Expand description

Everything that runs on one direction, split into segments.

One segment is the common common case and runs entirely on the reading task. A stage declared Detached starts a new segment, which the host runs on its own task behind a bounded channel; subsequent inline stages join that segment rather than spawning more.

Implementations§

Source§

impl Chain

Source

pub fn new(meta: PipelineMeta, segments: Vec<Segment>) -> Self

Source

pub fn meta(&self) -> &PipelineMeta

Source

pub fn is_empty(&self) -> bool

No stages at all: the host should use its plain copy path.

Source

pub fn segments(&self) -> &[Segment]

Source

pub fn into_segments(self) -> Vec<Segment>

Source

pub fn datagram_hazard(&self) -> Option<&str>

The first stage on this chain that must not carry datagrams, if any.

A subprocess never can: its stdin and stdout are byte streams, so message boundaries are gone the moment bytes cross the pipe.

Source

pub fn declarations(&self) -> Vec<Declaration<'_>>

Every stage’s boundary declaration, flattened across segments.

A detached subprocess is Boundaries::Fuse whatever it runs: its stdin and stdout are byte streams, so units do not cross the pipe.

Source

pub fn boundary_faults( &self, upstream_datagram: bool, downstream_datagram: bool, ) -> Vec<BoundaryFault<'_>>

Every stage on this chain whose requirement the path does not meet.

Each requiring stage is checked by walking away from it towards the end it named. The scan stops at the first stage that settles the question: a frame below satisfies a downstream requirement however many stages fuse under it, an unframe above satisfies an upstream one, and a stage that does not carry units in the direction of travel is the fault. A scan that reaches the end of the chain is answered by the endpoint, which carries messages only when it is a datagram endpoint.

Both flags are oriented for this chain’s direction: upstream is the endpoint it reads from and downstream the one it writes to.

Source

pub fn stage_names(&self) -> Vec<&str>

Trait Implementations§

Source§

impl Debug for Chain

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Chain

§

impl !Sync for Chain

§

impl !UnwindSafe for Chain

§

impl Freeze for Chain

§

impl Send for Chain

§

impl Unpin for Chain

§

impl UnsafeUnpin for Chain

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> 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, 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.