twilight_model/guild/
unavailable_guild.rs1use crate::{
2 id::{marker::GuildMarker, Id},
3 util::mustbe::MustBeBool,
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize)]
8pub struct UnavailableGuild {
9 pub id: Id<GuildMarker>,
10 pub unavailable: bool,
11}
12
13impl<'de> Deserialize<'de> for UnavailableGuild {
14 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
15 where
16 D: serde::Deserializer<'de>,
17 {
18 #[derive(Deserialize)]
19 #[serde(rename = "UnavailableGuild")] struct UnavailableGuildIntermediate {
21 id: Id<GuildMarker>,
22 #[allow(unused)] unavailable: MustBeBool<true>,
24 }
25
26 let intermediate = UnavailableGuildIntermediate::deserialize(deserializer)?;
27
28 Ok(Self {
29 id: intermediate.id,
30 unavailable: true,
31 })
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::UnavailableGuild;
38 use crate::id::Id;
39 use serde_test::Token;
40
41 #[test]
42 fn unavailable_guild() {
43 let value = UnavailableGuild {
44 id: Id::new(1),
45 unavailable: true,
46 };
47
48 serde_test::assert_tokens(
49 &value,
50 &[
51 Token::Struct {
52 name: "UnavailableGuild",
53 len: 2,
54 },
55 Token::Str("id"),
56 Token::NewtypeStruct { name: "Id" },
57 Token::Str("1"),
58 Token::Str("unavailable"),
59 Token::Bool(true),
60 Token::StructEnd,
61 ],
62 );
63 }
64}