use errors::ErrorKind;
use lazy::{LazyAssertion, LazyMatcher, SimpleAssert};
use std::fmt::Debug;
pub trait ResultMust<O: Debug, E: Debug>: Sized + Debug {
fn must_be_ok(self) -> SimpleAssert<O>;
fn must_be_ok_and<F, R>(self, op: F) -> LazyAssertion<R>
where F: FnOnce(O) -> LazyAssertion<R>,
R: LazyMatcher
{
self.must_be_ok().and(op)
}
fn must_be_err(self) -> SimpleAssert<E>;
fn must_be_err_and<F, R>(self, op: F) -> LazyAssertion<R>
where F: FnOnce(E) -> LazyAssertion<R>,
R: LazyMatcher
{
self.must_be_err().and(op)
}
}
impl<O: Debug, E: Debug> ResultMust<O, E> for Result<O, E> {
fn must_be_ok(self) -> SimpleAssert<O> {
match self {
Ok(val) => val.into(),
Err(err) => ErrorKind::MustBeOk {}.but_got(err),
}
}
fn must_be_err(self) -> SimpleAssert<E> {
match self {
Ok(val) => ErrorKind::MustBeErr {}.but_got(val),
Err(err) => err.into(),
}
}
}