pipecircuit 0.0.21

Correct. Robust. Fast. Portable. Pick four.
Documentation
use pipecircuit::{Pipe, PipeDriver, PipeOutputHandler, PipeSender, ScopedSender};

struct Bytes;
impl Pipe for Bytes {
    type In<'message> = &'message [u8];
    type Out<'message> = &'message [u8];
}
struct Escape;
impl<Driver: PipeDriver<Bytes>> PipeOutputHandler<Bytes, Driver> for Escape {
    type Failure = &'static [u8];
    fn output<'message, Sender>(
        &mut self,
        output: &'message [u8],
        _outgoing: &mut Sender,
    ) -> Result<(), Self::Failure>
    where
        Sender: ScopedSender<'message, Bytes>
            + for<'input> PipeSender<Bytes, Outcome<'input> = Driver::Submission<'input>>,
    {
        Err(output)
    }
}
fn main() {}