antaeus 0.3.8

A Versatile Framework for Vexide
Documentation
#[derive(Debug, Clone)]
pub enum Report<T, E> {
    Ok(T),
    Warn { value: T, error: E },
}

impl<T, E> Report<T, E> {
    pub fn new(value: T) -> Self { Self::Ok(value) }

    pub fn from_parts(value: T, error: E) -> Self { Self::Warn { value, error } }

    pub fn has_errors(&self) -> bool { matches!(self, Self::Warn { .. }) }

    pub fn is_ok(&self) -> bool { matches!(self, Self::Ok(_)) }

    pub fn map<U>(self, f: impl FnOnce(T) -> U) -> Report<U, E> {
        match self {
            Report::Ok(v) => Report::Ok(f(v)),
            Report::Warn { value, error } => Report::Warn {
                value: f(value),
                error,
            },
        }
    }

    pub fn into_parts(self) -> (T, Option<E>) {
        match self {
            Report::Ok(v) => (v, None),
            Report::Warn { value, error } => (value, Some(error)),
        }
    }

    pub fn value(self) -> T {
        match self {
            Report::Ok(v) => v,
            Report::Warn { value, .. } => value,
        }
    }
}