twilight_model/guild/onboarding/
prompt.rs1use crate::id::{marker::OnboardingPromptMarker, Id};
2use serde::{Deserialize, Serialize};
3
4use super::{OnboardingPromptOption, OnboardingPromptType};
5
6#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
8pub struct OnboardingPrompt {
9 pub id: Id<OnboardingPromptMarker>,
11 pub in_onboarding: bool,
13 #[serde(rename = "type")]
15 pub kind: OnboardingPromptType,
16 pub options: Vec<OnboardingPromptOption>,
18 pub required: bool,
20 pub single_select: bool,
22 pub title: String,
24}
25
26#[cfg(test)]
27mod tests {
28 use super::OnboardingPrompt;
29 use crate::{guild::onboarding::OnboardingPromptType, id::Id};
30 use serde_test::Token;
31
32 #[test]
33 fn onboarding_prompt() {
34 let prompt = OnboardingPrompt {
35 id: Id::new(123_456_789),
36 in_onboarding: true,
37 kind: OnboardingPromptType::MultipleChoice,
38 options: Vec::new(),
39 required: true,
40 single_select: true,
41 title: String::from("a prompt"),
42 };
43
44 serde_test::assert_tokens(
45 &prompt,
46 &[
47 Token::Struct {
48 name: "OnboardingPrompt",
49 len: 7,
50 },
51 Token::Str("id"),
52 Token::NewtypeStruct { name: "Id" },
53 Token::Str("123456789"),
54 Token::Str("in_onboarding"),
55 Token::Bool(true),
56 Token::Str("type"),
57 Token::U8(0),
58 Token::Str("options"),
59 Token::Seq { len: Some(0) },
60 Token::SeqEnd,
61 Token::Str("required"),
62 Token::Bool(true),
63 Token::Str("single_select"),
64 Token::Bool(true),
65 Token::Str("title"),
66 Token::Str("a prompt"),
67 Token::StructEnd,
68 ],
69 );
70 }
71}