orion_error/traits/
owenance.rs

1use crate::{
2    core::{DomainFrom, DomainReason, UvsReason},
3    StructError, UvsBizFrom, UvsDataFrom, UvsResFrom, UvsRuleFrom, UvsSysFrom,
4};
5
6/// 非结构错误(StructError) 转化为结构错误。
7///
8use std::fmt::Display;
9pub trait ErrorOwe<T, R>
10where
11    R: DomainReason,
12{
13    fn owe(self, reason: R) -> Result<T, StructError<R>>;
14    fn owe_logic(self) -> Result<T, StructError<R>>;
15    fn owe_biz(self) -> Result<T, StructError<R>>;
16    fn owe_rule(self) -> Result<T, StructError<R>>;
17    fn owe_data(self) -> Result<T, StructError<R>>;
18    fn owe_conf(self) -> Result<T, StructError<R>>;
19    fn owe_res(self) -> Result<T, StructError<R>>;
20    fn owe_sys(self) -> Result<T, StructError<R>>;
21}
22
23impl<T, E, R> ErrorOwe<T, R> for Result<T, E>
24where
25    E: Display,
26    R: DomainReason,
27{
28    fn owe(self, reason: R) -> Result<T, StructError<R>> {
29        match self {
30            Ok(v) => Ok(v),
31            Err(e) => Err(StructError::from_domain(reason).with_detail(e.to_string())),
32        }
33    }
34
35    fn owe_logic(self) -> Result<T, StructError<R>> {
36        self.map_err(|e| StructError::from_uvs_rs(UvsReason::from_sys(e.to_string())))
37    }
38    fn owe_biz(self) -> Result<T, StructError<R>> {
39        self.map_err(|e| StructError::from_uvs_rs(UvsReason::from_biz(e.to_string())))
40    }
41    fn owe_rule(self) -> Result<T, StructError<R>> {
42        self.map_err(|e| StructError::from_uvs_rs(UvsReason::from_rule(e.to_string())))
43    }
44    fn owe_data(self) -> Result<T, StructError<R>> {
45        self.map_err(|e| StructError::from_uvs_rs(UvsReason::from_data(e.to_string(), None)))
46    }
47    fn owe_conf(self) -> Result<T, StructError<R>> {
48        self.map_err(|e| StructError::from_uvs_rs(UvsReason::core_conf(e.to_string())))
49    }
50    fn owe_res(self) -> Result<T, StructError<R>> {
51        self.map_err(|e| StructError::from_uvs_rs(UvsReason::from_res(e.to_string())))
52    }
53    fn owe_sys(self) -> Result<T, StructError<R>> {
54        self.map_err(|e| StructError::from_uvs_rs(UvsReason::from_sys(e.to_string())))
55    }
56}