twilight_model/oauth/team/
member.rs

1use crate::{
2    id::{Id, marker::OauthTeamMarker},
3    oauth::team::TeamMembershipState,
4    user::User,
5};
6use serde::{Deserialize, Serialize};
7
8#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
9pub struct TeamMember {
10    pub membership_state: TeamMembershipState,
11    pub permissions: Vec<String>,
12    pub team_id: Id<OauthTeamMarker>,
13    pub user: User,
14}
15
16#[cfg(test)]
17mod tests {
18    use super::{TeamMember, TeamMembershipState, User};
19    use crate::id::Id;
20    use serde_test::Token;
21
22    #[test]
23    fn team_member() {
24        let value = TeamMember {
25            membership_state: TeamMembershipState::Accepted,
26            permissions: vec!["*".to_owned()],
27            team_id: Id::new(1),
28            user: User {
29                accent_color: None,
30                avatar: None,
31                avatar_decoration: None,
32                avatar_decoration_data: None,
33                banner: None,
34                bot: false,
35                discriminator: 1,
36                email: None,
37                flags: None,
38                global_name: Some("test".to_owned()),
39                id: Id::new(2),
40                locale: None,
41                mfa_enabled: None,
42                name: "test".to_owned(),
43                premium_type: None,
44                primary_guild: None,
45                public_flags: None,
46                system: None,
47                verified: None,
48            },
49        };
50
51        serde_test::assert_tokens(
52            &value,
53            &[
54                Token::Struct {
55                    name: "TeamMember",
56                    len: 4,
57                },
58                Token::Str("membership_state"),
59                Token::U8(2),
60                Token::Str("permissions"),
61                Token::Seq { len: Some(1) },
62                Token::Str("*"),
63                Token::SeqEnd,
64                Token::Str("team_id"),
65                Token::NewtypeStruct { name: "Id" },
66                Token::Str("1"),
67                Token::Str("user"),
68                Token::Struct {
69                    name: "User",
70                    len: 10,
71                },
72                Token::Str("accent_color"),
73                Token::None,
74                Token::Str("avatar"),
75                Token::None,
76                Token::Str("avatar_decoration"),
77                Token::None,
78                Token::Str("avatar_decoration_data"),
79                Token::None,
80                Token::Str("banner"),
81                Token::None,
82                Token::Str("bot"),
83                Token::Bool(false),
84                Token::Str("discriminator"),
85                Token::Str("0001"),
86                Token::Str("global_name"),
87                Token::Some,
88                Token::Str("test"),
89                Token::Str("id"),
90                Token::NewtypeStruct { name: "Id" },
91                Token::Str("2"),
92                Token::Str("username"),
93                Token::Str("test"),
94                Token::StructEnd,
95                Token::StructEnd,
96            ],
97        );
98    }
99}