shoulda_core 0.2.1

derive macro for test assertions
Documentation
use crate::should_result::ShouldResult;

pub trait AssertionHook {
    fn create_result(pass: bool, message: String, results: &mut Vec<ShouldResult>);
}

pub struct NoOpAssertionHook;

impl AssertionHook for NoOpAssertionHook {
    fn create_result(pass: bool, message: String, results: &mut Vec<ShouldResult>) {
        results.push((pass, message).into())
    }
}

pub struct NotAssertionHook;

impl AssertionHook for NotAssertionHook {
    fn create_result(pass: bool, message: String, results: &mut Vec<ShouldResult>) {
        results.push((!pass, format!("NOT: {}", message)).into())
    }
}

pub struct OrAssertionHook;

impl AssertionHook for OrAssertionHook {
    fn create_result(pass: bool, message: String, results: &mut Vec<ShouldResult>) {
        match results.pop() {
            None => NoOpAssertionHook::create_result(pass, message, results),
            Some(result) => results.push(result.or((pass, message).into())),
        }
    }
}