1use crate::VortexResult;
2
3pub trait ResultExt<T>: private::Sealed {
5 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 assert_eq!(5, r.unnest().unwrap());
36 }
37}