roxy_cli 0.1.2

A command-line static site generator
pub(crate) trait ResultExt<T, E>: Sized {
    fn then_err_into<U, E2: From<E>>(self, op: impl FnOnce(T) -> Result<U, E2>) -> Result<U, E2>;
}

pub(crate) trait FilterExt<T> {
    fn filter(self, op: impl FnOnce(&T) -> bool) -> Self;
}

impl<T, E> FilterExt<T> for Result<T, E> {
    fn filter(self, op: impl FnOnce(&T) -> bool) -> Self {
        match self {
            Ok(x) if op(&x) => Ok(x),
            e => e,
        }
    }
}

impl<T> FilterExt<T> for Option<T> {
    fn filter(self, op: impl FnOnce(&T) -> bool) -> Self {
        match self {
            Some(x) if op(&x) => Some(x),
            v => v,
        }
    }
}

impl<T, E> ResultExt<T, E> for Result<T, E> {
    fn then_err_into<U, E2: From<E>>(self, op: impl FnOnce(T) -> Result<U, E2>) -> Result<U, E2> {
        op(self?)
    }
}