Skip to content

Commit 3763a26

Browse files
authored
add ext trait and function to flatten nested VortexResult (#2360)
just a temporary measure until the [language API](rust-lang/rust#70142) is stabilized. I have a couple of these cases in #2348 so I figured its worth pulling into a separate PR.
1 parent 68e1832 commit 3763a26

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

vortex-error/src/ext.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
use crate::VortexResult;
2+
3+
/// Extension trait for VortexResult
4+
pub trait ResultExt<T>: private::Sealed {
5+
/// Flatten a nested [`VortexResult`]. Helper function until <https://github.com/rust-lang/rust/issues/70142> is stabilized.
6+
fn flatten(self) -> VortexResult<T>;
7+
}
8+
9+
mod private {
10+
use crate::VortexResult;
11+
12+
pub trait Sealed {}
13+
14+
impl<T> Sealed for VortexResult<VortexResult<T>> {}
15+
}
16+
17+
impl<T> ResultExt<T> for VortexResult<VortexResult<T>> {
18+
fn flatten(self) -> VortexResult<T> {
19+
match self {
20+
Ok(Ok(v)) => Ok(v),
21+
Ok(Err(e)) | Err(e) => Err(e),
22+
}
23+
}
24+
}

vortex-error/src/lib.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
#[cfg(feature = "python")]
88
pub mod python;
99

10+
mod ext;
11+
1012
use std::backtrace::Backtrace;
1113
use std::borrow::Cow;
1214
use std::convert::Infallible;
@@ -16,6 +18,8 @@ use std::num::TryFromIntError;
1618
use std::ops::Deref;
1719
use std::{env, fmt, io};
1820

21+
pub use ext::*;
22+
1923
/// A string that can be used as an error message.
2024
#[derive(Debug)]
2125
pub struct ErrString(Cow<'static, str>);

0 commit comments

Comments
 (0)