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>where
NodeTypes: Clone,
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Clone for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>where
NodeTypes: Clone,
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>where
NodeTypes: Freeze,
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: Send,
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Sync for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>where
NodeTypes: Sync,
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> Unpin for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>where
NodeTypes: Unpin,
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> UnsafeUnpin for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>where
NodeTypes: UnsafeUnpin,
impl<Input, Output, Error, Context, NodeTypes, NodeIOETypes> UnwindSafe for SequentialFlow<Input, Output, Error, Context, NodeTypes, NodeIOETypes>where
NodeTypes: UnwindSafe,
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