stefans_utils/
try_map_into.rs

1pub trait TryMapInto<T> {
2    type Error;
3
4    fn try_map_into(self) -> Result<T, Self::Error>;
5}
6
7impl<A: TryInto<B>, B> TryMapInto<Option<B>> for Option<A> {
8    type Error = A::Error;
9
10    fn try_map_into(self) -> Result<Option<B>, Self::Error> {
11        self.map(A::try_into).transpose()
12    }
13}
14
15impl<OkA: TryInto<OkB>, OkB, ErrA: Into<ErrB>, ErrB> TryMapInto<Result<OkB, ErrB>>
16    for Result<OkA, ErrA>
17{
18    type Error = OkA::Error;
19
20    fn try_map_into(self) -> Result<Result<OkB, ErrB>, Self::Error> {
21        match self {
22            Ok(a) => a.try_into().map(Ok),
23            Err(err_a) => Ok(Err(err_a.into())),
24        }
25    }
26}