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>
impl<Input, Output, Error, Context> SequentialFlow<Input, Output, Error, Context>
Sourcepub fn builder() -> Builder<Input, Output, Error, Context>
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>
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Clone for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
Source§impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Debug for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>where
NodeTypes: ChainDebug,
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Debug for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>where
NodeTypes: ChainDebug,
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>,
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
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
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>
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Sync for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>
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> 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
Mutably borrows from an owned value. Read more
Source§impl<Input, Output, Error, Context, T> BoxedNode<Input, Output, Error, Context> for Twhere
T: Node<Input, Output, Error, Context>,
impl<Input, Output, Error, Context, T> BoxedNode<Input, Output, Error, Context> for Twhere
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,
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
fn describe(&self) -> Description
Available on crate feature
boxed_node only.Describes this node, its type signature and other specifics. Read more