pipecircuit-cli 0.0.14

Command-line architectural tools for Pipecircuit programs
#![no_std]

use pipecircuit::Switchboard;

use __CRATE___pipes as app_pipes;

pipecircuit::pipe_roster! {
    pub mod activation {
        client: super::app_pipes::Client,
        activator: super::app_pipes::Activator,
    }
}
pub use activation::{From, To};

pub struct ActivationProgram;
impl Switchboard for ActivationProgram {
    type From<'message> = From<'message>;
    type To<'message> = To<'message>;

    fn route<'message>(
        &mut self,
        from: Self::From<'message>,
    ) -> pipecircuit::Route<Self::To<'message>> {
        pipecircuit::Route::one({
            match from {
                From::Client(request) => To::Activator(request),
                From::Activator(activation) => To::Client(activation),
            }
        })
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use __CRATE___core::{domain_primitives::Activation, state_machines::latch::Activate};

    #[test]
    fn client_request_reaches_the_authority() {
        assert!(matches!(
            ActivationProgram.route(From::Client(Activate)),
            pipecircuit::Route::One(To::Activator(Activate))
        ));
    }

    #[test]
    fn every_authority_outcome_reaches_the_client() {
        for outcome in [Activation::Activated, Activation::AlreadyActive] {
            assert!(
                matches!(ActivationProgram.route(From::Activator(outcome)), pipecircuit::Route::One(To::Client(value)) if value == outcome)
            );
        }
    }
}