pub trait AsPassFail {
fn as_pass_fail(&self) -> PassFail;
}
pub enum PassFail {
Pass,
Fail,
}
pub trait AsPassFailError {
fn as_pass_fail_error(&self) -> PassFailError;
}
pub enum PassFailError {
Pass,
Fail,
Error,
}
impl<T, E> AsPassFailError for Result<T, E>
where
T: AsPassFail,
{
fn as_pass_fail_error(&self) -> PassFailError {
match self {
Ok(outcome) => match outcome.as_pass_fail() {
PassFail::Pass => PassFailError::Pass,
PassFail::Fail => PassFailError::Fail,
},
Err(_) => PassFailError::Error,
}
}
}