pub trait ConvertFrom<T> {
fn convert_from(_: T) -> Self;
}
impl<Val, EFrom, ETo: From<EFrom>> ConvertFrom<Result<Val, EFrom>> for Result<Val, ETo> {
fn convert_from(f: Result<Val, EFrom>) -> Self {
match f {
Err(error) => Err(error.into()),
Ok(o) => Ok(o),
}
}
}
pub trait ConvertInto<T> {
fn convert(self) -> T;
}
impl<Val, EFrom, ETo> ConvertInto<Result<Val, ETo>> for Result<Val, EFrom>
where
Result<Val, ETo>: ConvertFrom<Result<Val, EFrom>>,
{
fn convert(self) -> Result<Val, ETo> {
Result::<Val, ETo>::convert_from(self)
}
}