Type Alias async_pipes::BoxedAnySend 
source · pub type BoxedAnySend = Box<dyn Any + Send + 'static>;Expand description
A Box that can hold any value (Any) that is also Send.
Values sent through pipes are trait objects of this type.
This type is publicly exposed as it’s needed when building a pipeline stage with multiple outputs. Since each output could have a different type, it’s more feasible to define the outputs to use dynamic dispatching rather that static dispatching.
Examples
Here’s an example of a closure representing the task function given to the pipeline builder when creating a “branching” stage. Three outputs are returned, each of a different type.
use std::ops::Deref;
use async_pipes::BoxedAnySend;
tokio_test::block_on(async {
    let task = |value: String| async move {
        let length: usize = value.len();
        let excited: String = format!("{}!", value);
        let odd_length: bool = length % 2 == 1;
        Option::<Vec<Option<BoxedAnySend>>>::Some(vec![
            Some(Box::new(length)),
            Some(Box::new(excited)),
            Some(Box::new(odd_length)),
        ])
    };
    // E.g.:
    // ...
    // .with_branching_stage("pipe_in", vec!["pipe_len", "pipe_excited", "pipe_odd"], <task>)
    // ...
    let mut results = task("hello".to_string()).await.unwrap();
    let length = results.remove(0).unwrap().downcast::<usize>().unwrap();
    let excited = results.remove(0).unwrap().downcast::<String>().unwrap();
    let odd_length = results.remove(0).unwrap().downcast::<bool>().unwrap();
    assert_eq!(*length, 5usize);
    assert_eq!(*excited, "hello!".to_string());
    assert_eq!(*odd_length, true);
});Aliased Type§
struct BoxedAnySend(/* private fields */);