SequentialFlow

Struct SequentialFlow 

Source
pub struct SequentialFlow<Input, Output, Error, Context, NodeTypes = (), NodeIOETypes = ()> { /* private fields */ }
Expand description

SequentialFlow executes nodes sequentially, like a pipeline.

Nodes are executed sequentially like a pipeline where the output of one node is used as in input of the next node. Nodes are executed in order of insertion until all succeed or any node “hard” fails.

  • If a node returns NodeOutput::Ok, that value is then fed into the next node.
  • If a node returns NodeOutput::SoftFail, the flow soft-fails.
  • If a node returns an error, then that error is returned.

§Type Parameters

  • Input: The type of data accepted by this flow.
  • Output: The type of data produced by this flow.
  • Error: The type of error emitted by this flow.
  • Context: The type of context used during execution.

§Examples

use node_flow::node::{Node, NodeOutput};
use node_flow::flows::SequentialFlow;

// Example node
#[derive(Clone)]
struct AddOne;

struct ExampleCtx;

impl<Ctx: Send> Node<u8, NodeOutput<u8>, (), Ctx> for AddOne {
    async fn run(&mut self, input: u8, _: &mut Ctx) -> Result<NodeOutput<u8>, ()> {
        Ok(NodeOutput::Ok(input + 1))
    }
}

async fn main() {
    let mut flow = SequentialFlow::<u8, u8, (), _>::builder()
        .add_node(AddOne)
        .add_node(AddOne)
        .add_node(AddOne)
        .build();

    let mut ctx = ExampleCtx;
    let result = flow.run(5u8, &mut ctx).await;
    assert_eq!(result, Ok(NodeOutput::Ok(8)));
}

Implementations§

Source§

impl<Input, Output, Error, Context> SequentialFlow<Input, Output, Error, Context>
where Input: Send, Error: Send, Context: Send,

Source

pub fn builder() -> Builder<Input, Output, Error, Context>

Creates a new Builder for constructing SequentialFlow.

See also SequentialFlow.

§Examples
use node_flow::flows::SequentialFlow;

let builder = SequentialFlow::<u8, u16, (), Ctx>::builder();

Trait Implementations§

Source§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Clone for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Debug for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
where NodeTypes: ChainDebug,

Source§

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

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

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Node<Input, NodeOutput<Output>, Error, Context> for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
where NodeTypes: ChainRun<Input, Result<NodeOutput<Output>, Error>, Context, NodeIOETypes> + ChainDescribe<Context, NodeIOETypes>,

Source§

fn run( &mut self, input: Input, context: &mut Context, ) -> impl Future<Output = Result<NodeOutput<Output>, Error>> + Send

Runs the node. Read more
Source§

fn describe(&self) -> Description

Describes this node, its type signature and other specifics. Read more

Auto Trait Implementations§

§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Freeze for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>

§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> RefUnwindSafe for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
where NodeTypes: RefUnwindSafe,

§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Send for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
where NodeTypes: Sync + Send,

§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Sync for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
where NodeTypes: Sync + Send,

§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Unpin for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>

§

impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> UnwindSafe for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
where NodeTypes: RefUnwindSafe,

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<Input, Output, Error, Context, T> BoxedNode<Input, Output, Error, Context> for T
where T: Node<Input, Output, Error, Context>,

Source§

fn run_boxed<'life0, 'life1, 'async_trait>( &'life0 mut self, input: Input, context: &'life1 mut Context, ) -> Pin<Box<dyn Future<Output = Result<Output, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Input: 'async_trait, Output: 'async_trait, Error: 'async_trait, T: 'async_trait,

Available on crate feature boxed_node only.
Runs the node. Read more
Source§

fn describe(&self) -> Description

Available on crate feature boxed_node only.
Describes this node, its type signature and other specifics. 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 = 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V