twilight_model/guild/onboarding/
prompt_type.rs

1use serde::{Deserialize, Serialize};
2
3/// The type of an onboarding prompt.
4#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5#[non_exhaustive]
6#[serde(from = "u8", into = "u8")]
7pub enum OnboardingPromptType {
8    /// A prompt that allows the user to select multiple options.
9    MultipleChoice,
10    /// A prompt that allows the user to use a dropdown to select an option.
11    Dropdown,
12    /// An unknown prompt type.
13    Unknown(u8),
14}
15
16impl OnboardingPromptType {
17    pub const fn kind(self) -> &'static str {
18        match self {
19            Self::MultipleChoice => "MultipleChoice",
20            Self::Dropdown => "DropDown",
21            Self::Unknown(_) => "Unknown",
22        }
23    }
24}
25
26impl From<u8> for OnboardingPromptType {
27    fn from(value: u8) -> Self {
28        match value {
29            0 => Self::MultipleChoice,
30            1 => Self::Dropdown,
31            unknown => Self::Unknown(unknown),
32        }
33    }
34}
35
36impl From<OnboardingPromptType> for u8 {
37    fn from(value: OnboardingPromptType) -> Self {
38        match value {
39            OnboardingPromptType::MultipleChoice => 0,
40            OnboardingPromptType::Dropdown => 1,
41            OnboardingPromptType::Unknown(unknown) => unknown,
42        }
43    }
44}
45
46#[cfg(test)]
47mod tests {
48    use super::OnboardingPromptType;
49    use serde_test::{assert_tokens, Token};
50
51    #[test]
52    fn onboarding_prompt_type() {
53        const MAP: &[(OnboardingPromptType, u8, &str)] = &[
54            (OnboardingPromptType::MultipleChoice, 0, "MultipleChoice"),
55            (OnboardingPromptType::Dropdown, 1, "DropDown"),
56            (OnboardingPromptType::Unknown(3), 3, "Unknown"),
57        ];
58
59        for (prompt_type, number, name) in MAP {
60            assert_eq!(prompt_type.kind(), *name);
61            assert_eq!(u8::from(*prompt_type), *number);
62            assert_eq!(OnboardingPromptType::from(*number), *prompt_type);
63            assert_tokens(number, &[Token::U8(*number)])
64        }
65    }
66}