use super::super::*;
#[macro_export]
macro_rules! is_variant {
( $variant: path ) => {
Box::new(|actual: &_| {
use galvanic_assert::MatchResultBuilder;
let builder = MatchResultBuilder::for_("is_variant");
match actual {
&$variant {..} => builder.matched(),
_ => builder.failed_because(
&format!("passed variant does not match '{}'", stringify!($variant))
)
}
})
}
}
pub fn maybe_some<'a, T: 'a>(matcher: Box<Matcher<'a,T> + 'a>) -> Box<Matcher<'a,Option<T>> + 'a> {
Box::new(move |maybe_actual: &'a Option<T>| {
maybe_actual.as_ref()
.map_or(MatchResultBuilder::for_("maybe_some")
.failed_because("passed Option is None; cannot evaluate nested matcher"),
|actual| matcher.check(actual)
)
})
}
pub fn maybe_ok<'a, T: 'a, E: 'a>(matcher: Box<Matcher<'a,T> + 'a>) -> Box<Matcher<'a,Result<T,E>> + 'a> {
Box::new(move |maybe_actual: &'a Result<T,E>| {
match maybe_actual.as_ref() {
Ok(actual) => matcher.check(actual),
Err(_) => MatchResultBuilder::for_("maybe_ok")
.failed_because("passed Result is Err; cannot evaluate nested matcher")
}
})
}
pub fn maybe_err<'a, T: 'a, E: 'a>(matcher: Box<Matcher<'a,E> + 'a>) -> Box<Matcher<'a,Result<T,E>> + 'a> {
Box::new(move |maybe_actual: &'a Result<T,E>| {
match maybe_actual.as_ref() {
Err(actual) => matcher.check(actual),
Ok(_) => MatchResultBuilder::for_("maybe_err")
.failed_because("passed Result is Ok; cannot evaluate nested matcher")
}
})
}