Struct anchor_chain::parallel_node::ParallelNode  
source · pub struct ParallelNode<I, O, C>{
    pub nodes: Vec<Box<dyn Node<Input = I, Output = O> + Send + Sync>>,
    pub function: Box<dyn Fn(Vec<O>) -> BoxFuture<'static, Result<C, AnchorChainError>> + Send + Sync>,
}Expand description
A node that processes input through multiple nodes in parallel.
The ParallelNode struct represents a node that processes input through
multiple nodes in parallel. The output of each node is then combined using
a provided function to produce the final output.
Fields§
§nodes: Vec<Box<dyn Node<Input = I, Output = O> + Send + Sync>>The nodes that will process the input in parallel.
function: Box<dyn Fn(Vec<O>) -> BoxFuture<'static, Result<C, AnchorChainError>> + Send + Sync>The function to process the output of the nodes.
Implementations§
source§impl<I, O, C> ParallelNode<I, O, C>
 
impl<I, O, C> ParallelNode<I, O, C>
sourcepub fn new(
    nodes: Vec<Box<dyn Node<Input = I, Output = O> + Send + Sync>>,
    function: Box<dyn Fn(Vec<O>) -> BoxFuture<'static, Result<C, AnchorChainError>> + Send + Sync>
) -> Self
 
pub fn new( nodes: Vec<Box<dyn Node<Input = I, Output = O> + Send + Sync>>, function: Box<dyn Fn(Vec<O>) -> BoxFuture<'static, Result<C, AnchorChainError>> + Send + Sync> ) -> Self
Creates a new ParallelNode with the provided nodes and combination
function.
The combination function can be defined using the helper function to_boxed_future.
§Example
// Using PassThroughNode as an example node
use anchor_chain::{
    node::NoOpNode,
    parallel_node::ParallelNode,
    parallel_node::to_boxed_future
};
#[tokio::main]
async fn main() {
    let node1 = Box::new(NoOpNode::new());
    let node2 = Box::new(NoOpNode::new());
    let concat_fn = to_boxed_future(|outputs: Vec<String>| {
        Ok(outputs
           .iter()
           .enumerate()
           .map(|(i, output)| format!("Output {}:\n```\n{}\n```\n", i + 1, output))
           .collect::<Vec<String>>()
           .concat())
    });
    let parallel_node = ParallelNode::new(vec![node1, node2], concat_fn);
}Trait Implementations§
source§impl<I, O, C> Debug for ParallelNode<I, O, C>
 
impl<I, O, C> Debug for ParallelNode<I, O, C>
source§impl<I, O, C> Node for ParallelNode<I, O, C>
 
impl<I, O, C> Node for ParallelNode<I, O, C>
source§fn process<'life0, 'async_trait>(
    &'life0 self,
    input: Self::Input
) -> Pin<Box<dyn Future<Output = Result<Self::Output, AnchorChainError>> + Send + 'async_trait>>where
    Self: 'async_trait,
    'life0: 'async_trait,
 
fn process<'life0, 'async_trait>(
    &'life0 self,
    input: Self::Input
) -> Pin<Box<dyn Future<Output = Result<Self::Output, AnchorChainError>> + Send + 'async_trait>>where
    Self: 'async_trait,
    'life0: 'async_trait,
Processes the given input through nodes in parallel.
The input is processed by each node in parallel, and the results are combined using the provided function to produce the final output.
impl<I, O, C> Stateless for ParallelNode<I, O, C>
Auto Trait Implementations§
impl<I, O, C> Freeze for ParallelNode<I, O, C>
impl<I, O, C> !RefUnwindSafe for ParallelNode<I, O, C>
impl<I, O, C> Send for ParallelNode<I, O, C>
impl<I, O, C> Sync for ParallelNode<I, O, C>
impl<I, O, C> Unpin for ParallelNode<I, O, C>
impl<I, O, C> !UnwindSafe for ParallelNode<I, O, C>
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