use crate::{ErrorKind, Write}; pub trait ResultTupExt { fn map2(self, f: impl FnOnce(T) -> U) -> Result<(A, U), (B, E)>; } impl ResultTupExt for Result<(A, T), (B, E)> { fn map2(self, f: impl FnOnce(T) -> U) -> Result<(A, U), (B, E)> { match self { Ok((a, t)) => Ok((a, f(t))), Err((b, e)) => Err((b, e)), } } } pub trait Tup { fn tup(self, v: V) -> Result<(V, T), (V, E)>; } impl Tup for Result { fn tup(self, v: V) -> Result<(V, T), (V, E)> { match self { Ok(t) => Ok((v, t)), Err(e) => Err((v, e)), } } } pub trait Lift { fn lift(self) -> (V, Result); } impl Lift for Result<(V, T), (V, E)> { fn lift(self) -> (V, Result) { match self { Ok((v, t)) => (v, Ok(t)), Err((v, e)) => (v, Err(e)), } } }