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