1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use crate::error::CDResult;

pub trait OkOrThen<T> {
    fn ok_or_then<F: FnOnce() -> CDResult<T>>(self, cb: F) -> CDResult<T>;
}

impl<T> OkOrThen<T> for Option<T> {
    fn ok_or_then<F: FnOnce() -> CDResult<T>>(self, cb: F) -> CDResult<T> {
        if let Some(s) = self {
            Ok(s)
        } else {
            cb()
        }
    }
}