twilight_model/oauth/team/
mod.rs1mod 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}