doido-controller 0.0.15

Action Controller + routing + Tower middleware for Doido: handlers, Context, responses, filters, routes! DSL, sessions, and middleware stacks.
Documentation
use doido_controller::initializers::Initializers;
use std::sync::{Arc, Mutex};

#[test]
fn initializers_run_in_registration_order() {
    let order = Arc::new(Mutex::new(Vec::<&'static str>::new()));

    let mut inits = Initializers::new();
    let a = order.clone();
    inits.register("first", move || {
        a.lock().unwrap().push("first");
        Ok(())
    });
    let b = order.clone();
    inits.register("second", move || {
        b.lock().unwrap().push("second");
        Ok(())
    });

    assert_eq!(inits.names(), vec!["first", "second"]);
    inits.run_all().unwrap();
    assert_eq!(*order.lock().unwrap(), vec!["first", "second"]);
}

#[test]
fn a_failing_initializer_stops_the_sequence() {
    let mut inits = Initializers::new();
    inits.register("boom", || Err(doido_core::anyhow::anyhow!("nope")));
    inits.register("never", || panic!("should not run"));
    assert!(inits.run_all().is_err());
}