twilight_model/oauth/team/
mod.rs

1mod member;
2mod membership_state;
3
4pub use self::{member::TeamMember, membership_state::TeamMembershipState};
5
6use crate::{
7    id::{
8        marker::{OauthTeamMarker, UserMarker},
9        Id,
10    },
11    util::image_hash::ImageHash,
12};
13use serde::{Deserialize, Serialize};
14
15#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize)]
16pub struct Team {
17    pub icon: Option<ImageHash>,
18    pub id: Id<OauthTeamMarker>,
19    pub members: Vec<TeamMember>,
20    pub name: String,
21    pub owner_user_id: Id<UserMarker>,
22}
23
24#[cfg(test)]
25mod tests {
26    use super::Team;
27    use crate::{id::Id, test::image_hash};
28    use serde::{Deserialize, Serialize};
29    use serde_test::Token;
30    use static_assertions::{assert_fields, assert_impl_all};
31    use std::{fmt::Debug, hash::Hash};
32
33    assert_fields!(Team: icon, id, members, name, owner_user_id);
34
35    assert_impl_all!(
36        Team: Clone,
37        Debug,
38        Deserialize<'static>,
39        Eq,
40        Hash,
41        PartialEq,
42        Serialize
43    );
44
45    #[test]
46    fn team() {
47        let value = Team {
48            icon: Some(image_hash::ICON),
49            id: Id::new(1),
50            members: Vec::new(),
51            name: "team name".into(),
52            owner_user_id: Id::new(2),
53        };
54
55        serde_test::assert_tokens(
56            &value,
57            &[
58                Token::Struct {
59                    name: "Team",
60                    len: 5,
61                },
62                Token::Str("icon"),
63                Token::Some,
64                Token::Str(image_hash::ICON_INPUT),
65                Token::Str("id"),
66                Token::NewtypeStruct { name: "Id" },
67                Token::Str("1"),
68                Token::Str("members"),
69                Token::Seq { len: Some(0) },
70                Token::SeqEnd,
71                Token::Str("name"),
72                Token::Str("team name"),
73                Token::Str("owner_user_id"),
74                Token::NewtypeStruct { name: "Id" },
75                Token::Str("2"),
76                Token::StructEnd,
77            ],
78        );
79    }
80}