on 8fe6525 help sign in
bat/src/util.rs
27 lines 775 B history raw
1/// Helper function that might appear in Rust stable at some point
2/// (https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.transpose)
3pub fn transpose<T, E>(opt: Option<Result<T, E>>) -> Result<Option<T>, E> {
4 opt.map_or(Ok(None), |res| res.map(Some))
5}
7#[cfg(test)]
8mod tests {
9 use super::transpose;
11 #[derive(Debug, PartialEq)]
12 struct TestError;
14 type TestResult<T> = Result<T, TestError>;
16 #[test]
17 fn basic() {
18 let a: Option<TestResult<i32>> = Some(Ok(2));
19 assert_eq!(Ok(Some(2)), transpose(a));
21 let b: Option<TestResult<i32>> = Some(Err(TestError));
22 assert_eq!(Err(TestError), transpose(b));
24 let c: Option<TestResult<i32>> = None;
25 assert_eq!(Ok(None), transpose(c));
26 }