twilight_model/guild/
partial_member.rs1use super::MemberFlags;
2use crate::user::AvatarDecorationData;
3use crate::{
4 guild::Permissions,
5 id::{Id, marker::RoleMarker},
6 user::User,
7 util::{ImageHash, Timestamp},
8};
9use serde::{Deserialize, Serialize};
10
11#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
12pub struct PartialMember {
13 #[serde(skip_serializing_if = "Option::is_none")]
15 pub avatar: Option<ImageHash>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub avatar_decoration_data: Option<AvatarDecorationData>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub banner: Option<ImageHash>,
20 pub communication_disabled_until: Option<Timestamp>,
21 pub deaf: bool,
22 pub flags: MemberFlags,
23 pub joined_at: Option<Timestamp>,
24 pub mute: bool,
25 pub nick: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
32 pub permissions: Option<Permissions>,
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub premium_since: Option<Timestamp>,
35 pub roles: Vec<Id<RoleMarker>>,
36 pub user: Option<User>,
37}
38
39#[cfg(test)]
40mod tests {
41 use super::PartialMember;
42 use crate::{
43 guild::MemberFlags,
44 id::Id,
45 util::datetime::{Timestamp, TimestampParseError},
46 };
47 use serde_test::Token;
48 use std::str::FromStr;
49
50 #[test]
51 fn partial_member() -> Result<(), TimestampParseError> {
52 let joined_at = Some(Timestamp::from_str("2015-04-26T06:26:56.936000+00:00")?);
53 let flags = MemberFlags::BYPASSES_VERIFICATION | MemberFlags::DID_REJOIN;
54
55 let value = PartialMember {
56 avatar: None,
57 avatar_decoration_data: None,
58 banner: None,
59 communication_disabled_until: None,
60 deaf: false,
61 flags,
62 joined_at,
63 mute: true,
64 nick: Some("a nickname".to_owned()),
65 permissions: None,
66 premium_since: None,
67 roles: vec![Id::new(1)],
68 user: None,
69 };
70
71 serde_test::assert_tokens(
72 &value,
73 &[
74 Token::Struct {
75 name: "PartialMember",
76 len: 8,
77 },
78 Token::Str("communication_disabled_until"),
79 Token::None,
80 Token::Str("deaf"),
81 Token::Bool(false),
82 Token::Str("flags"),
83 Token::U64(flags.bits()),
84 Token::Str("joined_at"),
85 Token::Some,
86 Token::Str("2015-04-26T06:26:56.936000+00:00"),
87 Token::Str("mute"),
88 Token::Bool(true),
89 Token::Str("nick"),
90 Token::Some,
91 Token::Str("a nickname"),
92 Token::Str("roles"),
93 Token::Seq { len: Some(1) },
94 Token::NewtypeStruct { name: "Id" },
95 Token::Str("1"),
96 Token::SeqEnd,
97 Token::Str("user"),
98 Token::None,
99 Token::StructEnd,
100 ],
101 );
102
103 Ok(())
104 }
105}