twilight_model/guild/onboarding/
mod.rs

1//! Types for guild onboarding.
2
3mod mode;
4mod option;
5mod prompt;
6mod prompt_type;
7
8use crate::id::{
9    marker::{ChannelMarker, GuildMarker},
10    Id,
11};
12use serde::{Deserialize, Serialize};
13
14pub use self::{
15    mode::OnboardingMode,
16    option::{OnboardingPromptEmoji, OnboardingPromptOption},
17    prompt::OnboardingPrompt,
18    prompt_type::OnboardingPromptType,
19};
20
21/// The onboarding data for a guild.
22#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
23pub struct Onboarding {
24    /// Channel IDs that new members get opted into automatically
25    pub default_channel_ids: Vec<Id<ChannelMarker>>,
26    /// Whether the guild has enabled onboarding.
27    pub enabled: bool,
28    /// ID of the guild this onboarding is a part of.
29    pub guild_id: Id<GuildMarker>,
30    /// Current mode of onboarding.
31    pub mode: OnboardingMode,
32    /// Array of [`OnboardingPrompt`]s for the guild onboarding flow.
33    pub prompts: Vec<OnboardingPrompt>,
34}
35
36#[cfg(test)]
37mod tests {
38    use super::{Onboarding, OnboardingMode};
39    use crate::id::Id;
40    use serde_test::Token;
41
42    #[test]
43    fn onboarding() {
44        let onboarding = Onboarding {
45            default_channel_ids: Vec::new(),
46            enabled: true,
47            guild_id: Id::new(123_456_789),
48            mode: OnboardingMode::OnboardingDefault,
49            prompts: Vec::new(),
50        };
51
52        serde_test::assert_tokens(
53            &onboarding,
54            &[
55                Token::Struct {
56                    name: "Onboarding",
57                    len: 5,
58                },
59                Token::Str("default_channel_ids"),
60                Token::Seq { len: Some(0) },
61                Token::SeqEnd,
62                Token::Str("enabled"),
63                Token::Bool(true),
64                Token::Str("guild_id"),
65                Token::NewtypeStruct { name: "Id" },
66                Token::Str("123456789"),
67                Token::Str("mode"),
68                Token::U8(0),
69                Token::Str("prompts"),
70                Token::Seq { len: Some(0) },
71                Token::SeqEnd,
72                Token::StructEnd,
73            ],
74        )
75    }
76}