pipecircuit 0.0.23

Correct. Robust. Fast. Portable. Pick four.
Documentation
pub trait Switchboard {
    type From<'message>;
    type To<'message>;

    #[must_use = "switchboard outputs must be routed or settled"]
    fn route<'message>(&mut self, input: Self::From<'message>) -> crate::Route<Self::To<'message>>;
}

#[cfg(test)]
mod tests {
    use super::*;

    struct Router;

    impl Switchboard for Router {
        type From<'message> = &'message str;
        type To<'message> = usize;

        fn route<'message>(
            &mut self,
            input: Self::From<'message>,
        ) -> pipecircuit::Route<Self::To<'message>> {
            pipecircuit::Route::one(input.len())
        }
    }

    #[test]
    fn switchboard_routes_its_declared_input_to_its_declared_output() {
        assert_eq!(Router.route("route me"), crate::Route::one(8));
    }
}