twilight_model/channel/stage_instance/
mod.rs

1mod privacy_level;
2
3pub use self::privacy_level::PrivacyLevel;
4
5use crate::id::{
6    marker::{ChannelMarker, GuildMarker, ScheduledEventMarker, StageMarker},
7    Id,
8};
9use serde::{Deserialize, Serialize};
10
11#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
12pub struct StageInstance {
13    pub channel_id: Id<ChannelMarker>,
14    pub guild_id: Id<GuildMarker>,
15    /// The id of the [`GuildScheduledEvent`].
16    ///
17    /// [`GuildScheduledEvent`]: crate::guild::scheduled_event::GuildScheduledEvent
18    pub guild_scheduled_event_id: Option<Id<ScheduledEventMarker>>,
19    pub id: Id<StageMarker>,
20    pub privacy_level: PrivacyLevel,
21    pub topic: String,
22}
23
24#[cfg(test)]
25mod tests {
26    use super::{PrivacyLevel, StageInstance};
27    use crate::id::Id;
28    use serde_test::Token;
29
30    #[test]
31    fn stage_instance() {
32        let value = StageInstance {
33            channel_id: Id::new(100),
34            guild_id: Id::new(200),
35            guild_scheduled_event_id: Some(Id::new(300)),
36            id: Id::new(400),
37            privacy_level: PrivacyLevel::GuildOnly,
38            topic: "a topic".into(),
39        };
40
41        serde_test::assert_tokens(
42            &value,
43            &[
44                Token::Struct {
45                    name: "StageInstance",
46                    len: 6,
47                },
48                Token::Str("channel_id"),
49                Token::NewtypeStruct { name: "Id" },
50                Token::Str("100"),
51                Token::Str("guild_id"),
52                Token::NewtypeStruct { name: "Id" },
53                Token::Str("200"),
54                Token::Str("guild_scheduled_event_id"),
55                Token::Some,
56                Token::NewtypeStruct { name: "Id" },
57                Token::Str("300"),
58                Token::Str("id"),
59                Token::NewtypeStruct { name: "Id" },
60                Token::Str("400"),
61                Token::Str("privacy_level"),
62                Token::U8(2),
63                Token::Str("topic"),
64                Token::Str("a topic"),
65                Token::StructEnd,
66            ],
67        );
68    }
69}