twilight_model/gateway/payload/incoming/
guild_create.rs1use crate::{
2 guild::{Guild, UnavailableGuild},
3 id::{marker::GuildMarker, Id},
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
10#[serde(untagged)]
11pub enum GuildCreate {
12 Unavailable(UnavailableGuild),
13 Available(Guild),
14}
15
16impl GuildCreate {
17 pub const fn id(&self) -> Id<GuildMarker> {
19 match self {
20 GuildCreate::Available(g) => g.id,
21 GuildCreate::Unavailable(g) => g.id,
22 }
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use serde_test::Token;
29
30 use crate::{guild::UnavailableGuild, id::Id};
31
32 use super::GuildCreate;
33
34 #[test]
35 fn unavailable_guild() {
36 let expected = GuildCreate::Unavailable(UnavailableGuild {
37 id: Id::new(1234),
38 unavailable: true,
39 });
40
41 serde_test::assert_tokens(
44 &expected,
45 &[
46 Token::Struct {
47 name: "UnavailableGuild",
48 len: 2,
49 },
50 Token::Str("id"),
51 Token::NewtypeStruct { name: "Id" },
52 Token::Str("1234"),
53 Token::Str("unavailable"),
54 Token::Bool(true),
55 Token::StructEnd,
56 ],
57 );
58 }
59}