orion_error/core/
universal.rs1use std::fmt::Display;
2use thiserror::Error;
3
4use super::ErrorCode;
5
6#[derive(Debug, Error, PartialEq, Clone)]
7pub enum ConfRSEnum {
8 #[error("core config > {0}")]
9 Core(String),
10 #[error("feature config error > {0}")]
11 Feature(String),
12 #[error("dynamic config error > {0}")]
13 Dynamic(String),
14}
15
16#[derive(Debug, Error, PartialEq, Clone)]
23pub enum UvsReason {
24 #[error("logic error << {0}")]
25 LogicError(ErrorPayload),
26 #[error("biz error << {0}")]
27 BizError(ErrorPayload),
28 #[error("data error << {0}")]
29 DataError(ErrorPayload, Option<usize>),
30 #[error("sys error << {0}")]
31 SysError(ErrorPayload),
32 #[error("res error << {0}")]
33 ResError(ErrorPayload),
34 #[error("conf error << {0}")]
35 ConfError(ConfRSEnum),
36 #[error("rule error << {0}")]
37 RuleError(ErrorPayload),
38 #[error("privacy error << {0}")]
39 PrivacyError(ErrorPayload),
40}
41
42impl UvsReason {
43 pub fn core_conf<S: Into<String>>(msg: S) -> Self {
44 Self::ConfError(ConfRSEnum::Core(msg.into()))
45 }
46 pub fn feature_conf<S: Into<String>>(msg: S) -> Self {
47 Self::ConfError(ConfRSEnum::Feature(msg.into()))
48 }
49 pub fn dynamic_conf<S: Into<String>>(msg: S) -> Self {
50 Self::ConfError(ConfRSEnum::Dynamic(msg.into()))
51 }
52}
53
54pub trait UvsReasonFrom<T, S> {
55 fn from_sys(info: S) -> T;
56 fn from_rule(info: S) -> T;
57 fn from_logic(info: S) -> T;
58 fn from_biz(info: S) -> T;
59 fn from_conf(info: S) -> T;
61 fn from_res(info: S) -> T;
62 fn from_data(info: S, pos: Option<usize>) -> T;
63}
64
65#[derive(Debug, PartialEq, Clone)]
67pub struct ErrorPayload(String);
68
69impl ErrorPayload {
70 pub fn new<S: Into<String>>(s: S) -> Self {
71 Self(s.into())
72 }
73}
74
75impl Display for ErrorPayload {
76 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
77 write!(f, "{}", self.0)
78 }
79}
80impl From<String> for ErrorPayload {
81 fn from(value: String) -> Self {
82 Self::new(value)
83 }
84}
85
86impl UvsReasonFrom<UvsReason, String> for UvsReason {
87 fn from_sys(info: String) -> Self {
88 UvsReason::SysError(ErrorPayload::new(info))
89 }
90
91 fn from_rule(info: String) -> Self {
92 UvsReason::RuleError(ErrorPayload::new(info))
93 }
94 fn from_logic(info: String) -> Self {
95 UvsReason::LogicError(ErrorPayload::new(info))
96 }
97 fn from_biz(info: String) -> Self {
98 UvsReason::BizError(ErrorPayload::new(info))
99 }
100
101 fn from_conf(info: String) -> Self {
102 UvsReason::ConfError(ConfRSEnum::Core(info))
103 }
104
105 fn from_res(info: String) -> Self {
106 UvsReason::ResError(ErrorPayload::new(info))
107 }
108 fn from_data(info: String, pos: Option<usize>) -> Self {
109 UvsReason::DataError(ErrorPayload::new(info), pos)
110 }
111}
112
113impl ErrorCode for UvsReason {
114 fn error_code(&self) -> i32 {
115 match self {
116 UvsReason::LogicError(_) => 100,
117 UvsReason::BizError(_) => 101,
118 UvsReason::DataError(_, _) => 102,
119 UvsReason::SysError(_) => 103,
120 UvsReason::ResError(_) => 104,
121 UvsReason::ConfError(_) => 105,
122 UvsReason::RuleError(_) => 106,
123 UvsReason::PrivacyError(_) => 107,
124 }
125 }
126}