pub trait ResultOkFrom<T1, T2, E1> {
fn ok_from(val: Result<T1, E1>) -> Self;
}
impl<T1, T2, E1> ResultOkFrom<T1, T2, E1> for Result<T2, E1>
where
T2: From<T1>,
{
#[inline]
fn ok_from(val: Result<T1, E1>) -> Self {
val.map(From::from)
}
}
pub trait ResultOkInto<T1, T2, E1> {
fn ok_into(self) -> Result<T2, E1>;
}
impl<T1, T2, E1> ResultOkInto<T1, T2, E1> for Result<T1, E1>
where
T2: From<T1>,
{
#[inline]
fn ok_into(self) -> Result<T2, E1> {
ResultOkFrom::ok_from(self)
}
}
pub trait ResultErrFrom<T1, E1, E2> {
fn err_from(val: Result<T1, E1>) -> Self;
}
impl<T1, E1, E2> ResultErrFrom<T1, E1, E2> for Result<T1, E2>
where
E2: From<E1>,
{
#[inline]
fn err_from(val: Result<T1, E1>) -> Self
where
E2: From<E1>,
{
val.map_err(From::from)
}
}
pub trait ResultErrInto<T1, E1, E2> {
fn err_into(self) -> Result<T1, E2>;
}
impl<T1, E1, E2> ResultErrInto<T1, E1, E2> for Result<T1, E1>
where
E2: From<E1>,
{
#[inline]
fn err_into(self) -> Result<T1, E2> {
ResultErrFrom::err_from(self)
}
}
pub trait ResultValueFrom<T1, T2, E1, E2> {
fn val_from(val: Result<T1, E1>) -> Self;
}
impl<T1, T2, E1, E2> ResultValueFrom<T1, T2, E1, E2> for Result<T2, E2>
where
T2: From<T1>,
E2: From<E1>,
{
#[inline]
fn val_from(val: Result<T1, E1>) -> Self {
val.err_into().ok_into()
}
}
pub trait ResultValueInto<T1, T2, E1, E2> {
fn val_into(self) -> Result<T2, E2>;
}
impl<T1, T2, E1, E2> ResultValueInto<T1, T2, E1, E2> for Result<T1, E1>
where
T2: From<T1>,
E2: From<E1>,
{
#[inline]
fn val_into(self) -> Result<T2, E2> {
ResultValueFrom::val_from(self)
}
}