orion_error/traits/
conversion.rs

1use crate::{core::convert_error, DomainReason, StructError, StructReason};
2
3pub trait ErrorConv<T, R: DomainReason>: Sized {
4    fn err_conv(self) -> Result<T, StructError<R>>;
5}
6
7pub trait ConvStructError<R: DomainReason>: Sized {
8    fn conv(self) -> StructError<R>;
9}
10
11impl<T, R1, R2> ErrorConv<T, R2> for Result<T, StructError<R1>>
12where
13    R1: DomainReason,
14    R2: DomainReason,
15    StructReason<R2>: From<R1>,
16{
17    fn err_conv(self) -> Result<T, StructError<R2>> {
18        match self {
19            Ok(o) => Ok(o),
20            Err(e) => Err(convert_error::<R1, R2>(e)),
21        }
22    }
23}
24
25impl<R1, R2> ConvStructError<R2> for StructError<R1>
26where
27    R1: DomainReason,
28    R2: DomainReason,
29    StructReason<R2>: From<R1>,
30{
31    fn conv(self) -> StructError<R2> {
32        convert_error::<R1, R2>(self)
33    }
34}