1use iso8601_timestamp::Timestamp;
2use serde::{Deserialize, Serialize};
3
4use crate::{attachment::Attachment, user::User};
5
6#[derive(Deserialize, Debug, Clone, Eq, PartialEq, Hash)]
8pub struct MemberCompositeKey {
9 pub server: String,
11 pub user: String,
13}
14
15#[derive(Deserialize, Debug, Clone)]
17pub struct Member {
18 #[serde(rename = "_id")]
20 pub id: MemberCompositeKey,
21
22 pub joined_at: Timestamp,
24
25 pub nickname: Option<String>,
27 pub avatar: Option<Attachment>,
29
30 #[serde(default)]
32 pub roles: Vec<String>,
33 pub timeout: Option<Timestamp>,
35}
36
37#[derive(Deserialize, Debug, Clone)]
39pub struct PartialMember {
40 #[serde(rename = "_id")]
42 pub id: Option<MemberCompositeKey>,
43
44 pub joined_at: Option<Timestamp>,
46
47 pub nickname: Option<String>,
49 pub avatar: Option<Attachment>,
51
52 pub roles: Option<Vec<String>>,
54 pub timeout: Option<Timestamp>,
56}
57
58#[derive(Deserialize, Debug, Clone)]
62pub struct MemberList {
63 pub members: Vec<Member>,
65 pub users: Vec<User>,
67}
68
69#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
71pub enum FieldsMember {
72 Nickname,
73 Avatar,
74 Roles,
75 Timeout,
76}