twilight_model/oauth/team/
member.rs

1use crate::{
2    id::{marker::OauthTeamMarker, Id},
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                public_flags: None,
45                system: None,
46                verified: None,
47            },
48        };
49
50        serde_test::assert_tokens(
51            &value,
52            &[
53                Token::Struct {
54                    name: "TeamMember",
55                    len: 4,
56                },
57                Token::Str("membership_state"),
58                Token::U8(2),
59                Token::Str("permissions"),
60                Token::Seq { len: Some(1) },
61                Token::Str("*"),
62                Token::SeqEnd,
63                Token::Str("team_id"),
64                Token::NewtypeStruct { name: "Id" },
65                Token::Str("1"),
66                Token::Str("user"),
67                Token::Struct {
68                    name: "User",
69                    len: 10,
70                },
71                Token::Str("accent_color"),
72                Token::None,
73                Token::Str("avatar"),
74                Token::None,
75                Token::Str("avatar_decoration"),
76                Token::None,
77                Token::Str("avatar_decoration_data"),
78                Token::None,
79                Token::Str("banner"),
80                Token::None,
81                Token::Str("bot"),
82                Token::Bool(false),
83                Token::Str("discriminator"),
84                Token::Str("0001"),
85                Token::Str("global_name"),
86                Token::Some,
87                Token::Str("test"),
88                Token::Str("id"),
89                Token::NewtypeStruct { name: "Id" },
90                Token::Str("2"),
91                Token::Str("username"),
92                Token::Str("test"),
93                Token::StructEnd,
94                Token::StructEnd,
95            ],
96        );
97    }
98}