1#[derive(Debug, PartialEq, Eq, Hash, Ord, PartialOrd, Copy, Clone)]
34#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
35pub enum FriendResult {
36 DbError,
37 ListFull,
38 Online,
39 Offline,
40 NotFound,
41 Removed,
42 AddedOnline,
43 AddedOffline,
44 Already,
45 SelfX,
46 Enemy,
47 IgnoreFull,
48 IgnoreSelf,
49 IgnoreNotFound,
50 IgnoreAlready,
51 IgnoreAdded,
52 IgnoreRemoved,
53 IgnoreAmbiguous,
54 MuteFull,
55 MuteSelf,
56 MuteNotFound,
57 MuteAlready,
58 MuteAdded,
59 MuteRemoved,
60 MuteAmbiguous,
61 Unknown19,
62 Unknown20,
63}
64
65impl FriendResult {
66 pub const fn as_int(&self) -> u8 {
67 match self {
68 Self::DbError => 0x0,
69 Self::ListFull => 0x1,
70 Self::Online => 0x2,
71 Self::Offline => 0x3,
72 Self::NotFound => 0x4,
73 Self::Removed => 0x5,
74 Self::AddedOnline => 0x6,
75 Self::AddedOffline => 0x7,
76 Self::Already => 0x8,
77 Self::SelfX => 0x9,
78 Self::Enemy => 0xa,
79 Self::IgnoreFull => 0xb,
80 Self::IgnoreSelf => 0xc,
81 Self::IgnoreNotFound => 0xd,
82 Self::IgnoreAlready => 0xe,
83 Self::IgnoreAdded => 0xf,
84 Self::IgnoreRemoved => 0x10,
85 Self::IgnoreAmbiguous => 0x11,
86 Self::MuteFull => 0x12,
87 Self::MuteSelf => 0x13,
88 Self::MuteNotFound => 0x14,
89 Self::MuteAlready => 0x15,
90 Self::MuteAdded => 0x16,
91 Self::MuteRemoved => 0x17,
92 Self::MuteAmbiguous => 0x18,
93 Self::Unknown19 => 0x19,
94 Self::Unknown20 => 0x1a,
95 }
96 }
97
98 pub const fn variants() -> [Self; 27] {
99 [
100 Self::DbError,
101 Self::ListFull,
102 Self::Online,
103 Self::Offline,
104 Self::NotFound,
105 Self::Removed,
106 Self::AddedOnline,
107 Self::AddedOffline,
108 Self::Already,
109 Self::SelfX,
110 Self::Enemy,
111 Self::IgnoreFull,
112 Self::IgnoreSelf,
113 Self::IgnoreNotFound,
114 Self::IgnoreAlready,
115 Self::IgnoreAdded,
116 Self::IgnoreRemoved,
117 Self::IgnoreAmbiguous,
118 Self::MuteFull,
119 Self::MuteSelf,
120 Self::MuteNotFound,
121 Self::MuteAlready,
122 Self::MuteAdded,
123 Self::MuteRemoved,
124 Self::MuteAmbiguous,
125 Self::Unknown19,
126 Self::Unknown20,
127 ]
128 }
129
130 pub const fn from_int(value: u8) -> Result<Self, crate::errors::EnumError> {
131 match value {
132 0 => Ok(Self::DbError),
133 1 => Ok(Self::ListFull),
134 2 => Ok(Self::Online),
135 3 => Ok(Self::Offline),
136 4 => Ok(Self::NotFound),
137 5 => Ok(Self::Removed),
138 6 => Ok(Self::AddedOnline),
139 7 => Ok(Self::AddedOffline),
140 8 => Ok(Self::Already),
141 9 => Ok(Self::SelfX),
142 10 => Ok(Self::Enemy),
143 11 => Ok(Self::IgnoreFull),
144 12 => Ok(Self::IgnoreSelf),
145 13 => Ok(Self::IgnoreNotFound),
146 14 => Ok(Self::IgnoreAlready),
147 15 => Ok(Self::IgnoreAdded),
148 16 => Ok(Self::IgnoreRemoved),
149 17 => Ok(Self::IgnoreAmbiguous),
150 18 => Ok(Self::MuteFull),
151 19 => Ok(Self::MuteSelf),
152 20 => Ok(Self::MuteNotFound),
153 21 => Ok(Self::MuteAlready),
154 22 => Ok(Self::MuteAdded),
155 23 => Ok(Self::MuteRemoved),
156 24 => Ok(Self::MuteAmbiguous),
157 25 => Ok(Self::Unknown19),
158 26 => Ok(Self::Unknown20),
159 v => Err(crate::errors::EnumError::new(NAME, v as i128),)
160 }
161 }
162}
163
164#[cfg(feature = "print-testcase")]
165impl FriendResult {
166 pub const fn as_test_case_value(&self) -> &'static str {
167 match self {
168 Self::DbError => "DB_ERROR",
169 Self::ListFull => "LIST_FULL",
170 Self::Online => "ONLINE",
171 Self::Offline => "OFFLINE",
172 Self::NotFound => "NOT_FOUND",
173 Self::Removed => "REMOVED",
174 Self::AddedOnline => "ADDED_ONLINE",
175 Self::AddedOffline => "ADDED_OFFLINE",
176 Self::Already => "ALREADY",
177 Self::SelfX => "SELF",
178 Self::Enemy => "ENEMY",
179 Self::IgnoreFull => "IGNORE_FULL",
180 Self::IgnoreSelf => "IGNORE_SELF",
181 Self::IgnoreNotFound => "IGNORE_NOT_FOUND",
182 Self::IgnoreAlready => "IGNORE_ALREADY",
183 Self::IgnoreAdded => "IGNORE_ADDED",
184 Self::IgnoreRemoved => "IGNORE_REMOVED",
185 Self::IgnoreAmbiguous => "IGNORE_AMBIGUOUS",
186 Self::MuteFull => "MUTE_FULL",
187 Self::MuteSelf => "MUTE_SELF",
188 Self::MuteNotFound => "MUTE_NOT_FOUND",
189 Self::MuteAlready => "MUTE_ALREADY",
190 Self::MuteAdded => "MUTE_ADDED",
191 Self::MuteRemoved => "MUTE_REMOVED",
192 Self::MuteAmbiguous => "MUTE_AMBIGUOUS",
193 Self::Unknown19 => "UNKNOWN19",
194 Self::Unknown20 => "UNKNOWN20",
195 }
196 }
197
198}
199
200const NAME: &str = "FriendResult";
201
202impl Default for FriendResult {
203 fn default() -> Self {
204 Self::DbError
205 }
206}
207
208impl std::fmt::Display for FriendResult {
209 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
210 match self {
211 Self::DbError => f.write_str("DbError"),
212 Self::ListFull => f.write_str("ListFull"),
213 Self::Online => f.write_str("Online"),
214 Self::Offline => f.write_str("Offline"),
215 Self::NotFound => f.write_str("NotFound"),
216 Self::Removed => f.write_str("Removed"),
217 Self::AddedOnline => f.write_str("AddedOnline"),
218 Self::AddedOffline => f.write_str("AddedOffline"),
219 Self::Already => f.write_str("Already"),
220 Self::SelfX => f.write_str("SelfX"),
221 Self::Enemy => f.write_str("Enemy"),
222 Self::IgnoreFull => f.write_str("IgnoreFull"),
223 Self::IgnoreSelf => f.write_str("IgnoreSelf"),
224 Self::IgnoreNotFound => f.write_str("IgnoreNotFound"),
225 Self::IgnoreAlready => f.write_str("IgnoreAlready"),
226 Self::IgnoreAdded => f.write_str("IgnoreAdded"),
227 Self::IgnoreRemoved => f.write_str("IgnoreRemoved"),
228 Self::IgnoreAmbiguous => f.write_str("IgnoreAmbiguous"),
229 Self::MuteFull => f.write_str("MuteFull"),
230 Self::MuteSelf => f.write_str("MuteSelf"),
231 Self::MuteNotFound => f.write_str("MuteNotFound"),
232 Self::MuteAlready => f.write_str("MuteAlready"),
233 Self::MuteAdded => f.write_str("MuteAdded"),
234 Self::MuteRemoved => f.write_str("MuteRemoved"),
235 Self::MuteAmbiguous => f.write_str("MuteAmbiguous"),
236 Self::Unknown19 => f.write_str("Unknown19"),
237 Self::Unknown20 => f.write_str("Unknown20"),
238 }
239 }
240}
241
242impl TryFrom<u8> for FriendResult {
243 type Error = crate::errors::EnumError;
244 fn try_from(value: u8) -> Result<Self, Self::Error> {
245 Self::from_int(value)
246 }
247}
248
249impl TryFrom<u16> for FriendResult {
250 type Error = crate::errors::EnumError;
251 fn try_from(value: u16) -> Result<Self, Self::Error> {
252 TryInto::<u8>::try_into(value)
253 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
254 .try_into()
255 }
256}
257
258impl TryFrom<u32> for FriendResult {
259 type Error = crate::errors::EnumError;
260 fn try_from(value: u32) -> Result<Self, Self::Error> {
261 TryInto::<u8>::try_into(value)
262 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
263 .try_into()
264 }
265}
266
267impl TryFrom<u64> for FriendResult {
268 type Error = crate::errors::EnumError;
269 fn try_from(value: u64) -> Result<Self, Self::Error> {
270 TryInto::<u8>::try_into(value)
271 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
272 .try_into()
273 }
274}
275
276impl TryFrom<i8> for FriendResult {
277 type Error = crate::errors::EnumError;
278 fn try_from(value: i8) -> Result<Self, Self::Error> {
279 let v = u8::from_le_bytes(value.to_le_bytes());
280 Self::from_int(v)
281 }
282}
283
284impl TryFrom<i16> for FriendResult {
285 type Error = crate::errors::EnumError;
286 fn try_from(value: i16) -> Result<Self, Self::Error> {
287 TryInto::<u8>::try_into(value)
288 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
289 .try_into()
290 }
291}
292
293impl TryFrom<i32> for FriendResult {
294 type Error = crate::errors::EnumError;
295 fn try_from(value: i32) -> Result<Self, Self::Error> {
296 TryInto::<u8>::try_into(value)
297 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
298 .try_into()
299 }
300}
301
302impl TryFrom<i64> for FriendResult {
303 type Error = crate::errors::EnumError;
304 fn try_from(value: i64) -> Result<Self, Self::Error> {
305 TryInto::<u8>::try_into(value)
306 .map_err(|_| crate::errors::EnumError::new(NAME, value.into()))?
307 .try_into()
308 }
309}
310
311impl TryFrom<usize> for FriendResult {
312 type Error = crate::errors::EnumError;
313 fn try_from(value: usize) -> Result<Self, Self::Error> {
314 TryInto::<u8>::try_into(value)
315 .map_err(|_| crate::errors::EnumError::new(NAME, value as i128))?
316 .try_into()
317 }
318}
319