vortex_error/
ext.rs

1use crate::VortexResult;
2
3/// Extension trait for VortexResult
4pub trait ResultExt<T>: private::Sealed {
5    /// Unnest a nested [`VortexResult`]. Helper function until <https://github.com/rust-lang/rust/issues/70142> is stabilized.
6    fn unnest(self) -> VortexResult<T>;
7}
8
9mod private {
10    use crate::VortexResult;
11
12    pub trait Sealed {}
13
14    impl<T> Sealed for VortexResult<VortexResult<T>> {}
15}
16
17impl<T> ResultExt<T> for VortexResult<VortexResult<T>> {
18    fn unnest(self) -> VortexResult<T> {
19        match self {
20            Ok(Ok(v)) => Ok(v),
21            Ok(Err(e)) | Err(e) => Err(e),
22        }
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29
30    #[test]
31    fn basic_example() {
32        let r: VortexResult<VortexResult<usize>> = Ok(Ok(5_usize));
33
34        // Only need to unwrap once!
35        assert_eq!(5, r.unnest().unwrap());
36    }
37}