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() } } }