1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum ErrorCode {
9 ParseJson,
11 ParseYaml,
12 ParseXml,
13 ParseCsv,
14 ParseRegex,
15 ParseEncoding,
16 IoNotFound,
18 IoPermission,
19 IoDiskFull,
20 IoReadFail,
21 IoWriteFail,
22 IoLockFail,
23 ExecNonZero,
25 ExecTimeout,
26 ExecNotFound,
27 ExecKilled,
28 ExecCrash,
29 NetTimeout,
31 NetDnsFail,
32 NetConnRefused,
33 NetSslError,
34 NetHttpError,
35 AuthLoginFail,
37 AuthTokenExpired,
38 AuthForbidden,
39 AuthUnauthorized,
40 ConfigMissing,
42 ConfigInvalid,
43 ConfigRange,
44 ResMemory,
46 ResDisk,
47 ResCpu,
48 ResFd,
49 TimeoutApi,
51 TimeoutDb,
52 TimeoutLock,
53 ConflictVersion,
55 ConflictLock,
56 ConflictDuplicate,
57 InternalUnexpected,
59 InternalAssert,
60 InternalType,
61 InternalKey,
62 InternalIndex,
63 Unknown,
65}
66
67impl ErrorCode {
68 pub const fn as_str(self) -> &'static str {
70 use ErrorCode::*;
71 match self {
72 ParseJson => "PARSE_JSON",
73 ParseYaml => "PARSE_YAML",
74 ParseXml => "PARSE_XML",
75 ParseCsv => "PARSE_CSV",
76 ParseRegex => "PARSE_REGEX",
77 ParseEncoding => "PARSE_ENCODING",
78 IoNotFound => "IO_NOT_FOUND",
79 IoPermission => "IO_PERMISSION",
80 IoDiskFull => "IO_DISK_FULL",
81 IoReadFail => "IO_READ_FAIL",
82 IoWriteFail => "IO_WRITE_FAIL",
83 IoLockFail => "IO_LOCK_FAIL",
84 ExecNonZero => "EXEC_NON_ZERO",
85 ExecTimeout => "EXEC_TIMEOUT",
86 ExecNotFound => "EXEC_NOT_FOUND",
87 ExecKilled => "EXEC_KILLED",
88 ExecCrash => "EXEC_CRASH",
89 NetTimeout => "NET_TIMEOUT",
90 NetDnsFail => "NET_DNS_FAIL",
91 NetConnRefused => "NET_CONN_REFUSED",
92 NetSslError => "NET_SSL_ERROR",
93 NetHttpError => "NET_HTTP_ERROR",
94 AuthLoginFail => "AUTH_LOGIN_FAIL",
95 AuthTokenExpired => "AUTH_TOKEN_EXPIRED",
96 AuthForbidden => "AUTH_FORBIDDEN",
97 AuthUnauthorized => "AUTH_UNAUTHORIZED",
98 ConfigMissing => "CONFIG_MISSING",
99 ConfigInvalid => "CONFIG_INVALID",
100 ConfigRange => "CONFIG_RANGE",
101 ResMemory => "RES_MEMORY",
102 ResDisk => "RES_DISK",
103 ResCpu => "RES_CPU",
104 ResFd => "RES_FD",
105 TimeoutApi => "TIMEOUT_API",
106 TimeoutDb => "TIMEOUT_DB",
107 TimeoutLock => "TIMEOUT_LOCK",
108 ConflictVersion => "CONFLICT_VERSION",
109 ConflictLock => "CONFLICT_LOCK",
110 ConflictDuplicate => "CONFLICT_DUPLICATE",
111 InternalUnexpected => "INTERNAL_UNEXPECTED",
112 InternalAssert => "INTERNAL_ASSERT",
113 InternalType => "INTERNAL_TYPE",
114 InternalKey => "INTERNAL_KEY",
115 InternalIndex => "INTERNAL_INDEX",
116 Unknown => "UNKNOWN",
117 }
118 }
119}
120
121impl std::fmt::Display for ErrorCode {
122 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
123 f.write_str(self.as_str())
124 }
125}
126
127#[cfg(test)]
128mod tests {
129 use super::*;
130 #[test]
131 fn known_codes() {
132 assert_eq!(ErrorCode::ExecNonZero.to_string(), "EXEC_NON_ZERO");
133 assert_eq!(ErrorCode::IoNotFound.as_str(), "IO_NOT_FOUND");
134 assert_eq!(ErrorCode::Unknown.as_str(), "UNKNOWN");
135 }
136}