twilight_model/guild/onboarding/
prompt_type.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
5#[non_exhaustive]
6#[serde(from = "u8", into = "u8")]
7pub enum OnboardingPromptType {
8 MultipleChoice,
10 Dropdown,
12 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}