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