twilight_model/channel/stage_instance/
mod.rs1mod 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 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}