pub use Outcome::{Success, Failure};
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)]
pub enum Outcome {
Success,
Failure
}
impl Outcome {
pub fn from_bool(good: bool) -> Outcome {
match good {
true => Success,
false => Failure,
}
}
pub fn is_success(&self) -> bool {
*self == Success
}
pub fn is_failure(&self) -> bool {
!self.is_success()
}
pub fn or_none<T>(self, ok: T) -> Option<T> {
match self {
Success => Some(ok),
Failure => None,
}
}
pub fn or_err<T, E>(self, good: T, err: E) -> Result<T, E> {
match self {
Success => Ok(good),
Failure => Err(err),
}
}
pub fn or_panic<T>(self, good: T) -> T {
match self {
Success => good,
Failure => panic!("Called `Outcome::or_panic(...)` on a `Failure` value"),
}
}
pub fn and(self, outb: Outcome) -> Outcome {
match self {
Success => outb,
Failure => Failure,
}
}
pub fn or(self, outb: Outcome) -> Outcome {
match self {
Success => Success,
Failure => outb,
}
}
pub fn and_then<F: FnOnce() -> Outcome>(self, f: F) -> Outcome {
match self {
Success => f(),
Failure => Failure,
}
}
pub fn or_then<F: FnOnce() -> Outcome>(self, f: F) -> Outcome {
match self {
Success => Success,
Failure => f(),
}
}
}