twilight_model/guild/onboarding/
mode.rs1use std::fmt::{Display, Formatter, Result as FmtResult};
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
7#[non_exhaustive]
8#[serde(from = "u8", into = "u8")]
9pub enum OnboardingMode {
10 OnboardingDefault,
12 OnboardingAdvanced,
14 Unknown(u8),
16}
17
18impl From<u8> for OnboardingMode {
19 fn from(value: u8) -> Self {
20 match value {
21 0 => OnboardingMode::OnboardingDefault,
22 1 => OnboardingMode::OnboardingAdvanced,
23 unknown => OnboardingMode::Unknown(unknown),
24 }
25 }
26}
27
28impl From<OnboardingMode> for u8 {
29 fn from(value: OnboardingMode) -> Self {
30 match value {
31 OnboardingMode::OnboardingDefault => 0,
32 OnboardingMode::OnboardingAdvanced => 1,
33 OnboardingMode::Unknown(unknown) => unknown,
34 }
35 }
36}
37
38impl OnboardingMode {
39 pub const fn name(self) -> &'static str {
41 match self {
42 Self::OnboardingDefault => "OnboardingDefault",
43 Self::OnboardingAdvanced => "OnboardingAdvanced",
44 Self::Unknown(_) => "Unknown",
45 }
46 }
47}
48
49impl Display for OnboardingMode {
50 fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
51 f.write_str(self.name())
52 }
53}
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58 use serde_test::Token;
59 use static_assertions::assert_impl_all;
60 use std::{fmt::Debug, hash::Hash};
61
62 assert_impl_all!(
63 OnboardingMode: Clone,
64 Copy,
65 Debug,
66 Deserialize<'static>,
67 Eq,
68 Hash,
69 PartialEq,
70 Send,
71 Serialize,
72 Sync
73 );
74
75 #[test]
76 fn variants() {
77 serde_test::assert_tokens(&OnboardingMode::OnboardingDefault, &[Token::U8(0)]);
78 serde_test::assert_tokens(&OnboardingMode::OnboardingAdvanced, &[Token::U8(1)]);
79 serde_test::assert_tokens(&OnboardingMode::Unknown(99), &[Token::U8(99)]);
80 }
81
82 #[test]
83 fn names() {
84 assert_eq!(
85 "OnboardingDefault",
86 OnboardingMode::OnboardingDefault.name()
87 );
88 assert_eq!(
89 "OnboardingAdvanced",
90 OnboardingMode::OnboardingAdvanced.name()
91 );
92 assert_eq!("Unknown", OnboardingMode::Unknown(99).name());
93 }
94}