util.rs

 1use anyhow::Result;
 2
 3pub trait Traverse<T, U> {
 4    fn traverse(self, f: impl FnOnce(T) -> Result<U>) -> Result<Option<U>>;
 5}
 6
 7impl<T, U> Traverse<T, U> for Option<T> {
 8    fn traverse(self, f: impl FnOnce(T) -> Result<U>) -> Result<Option<U>> {
 9        self.map_or(Ok(None), |value| f(value).map(Some))
10    }
11}