rive_models/
member.rs

1use iso8601_timestamp::Timestamp;
2use serde::{Deserialize, Serialize};
3
4use crate::{attachment::Attachment, user::User};
5
6/// Composite primary key consisting of server and user id
7#[derive(Deserialize, Debug, Clone, Eq, PartialEq, Hash)]
8pub struct MemberCompositeKey {
9    /// Server Id
10    pub server: String,
11    /// User Id
12    pub user: String,
13}
14
15/// Representation of a member of a server on Revolt
16#[derive(Deserialize, Debug, Clone)]
17pub struct Member {
18    /// Unique member id
19    #[serde(rename = "_id")]
20    pub id: MemberCompositeKey,
21
22    /// Time at which this user joined the server
23    pub joined_at: Timestamp,
24
25    /// Member's nickname
26    pub nickname: Option<String>,
27    /// Avatar attachment
28    pub avatar: Option<Attachment>,
29
30    /// Member's roles
31    #[serde(default)]
32    pub roles: Vec<String>,
33    /// Timestamp this member is timed out until
34    pub timeout: Option<Timestamp>,
35}
36
37/// Partial representation of a member of a server on Revolt
38#[derive(Deserialize, Debug, Clone)]
39pub struct PartialMember {
40    /// Unique member id
41    #[serde(rename = "_id")]
42    pub id: Option<MemberCompositeKey>,
43
44    /// Time at which this user joined the server
45    pub joined_at: Option<Timestamp>,
46
47    /// Member's nickname
48    pub nickname: Option<String>,
49    /// Avatar attachment
50    pub avatar: Option<Attachment>,
51
52    /// Member's roles
53    pub roles: Option<Vec<String>>,
54    /// Timestamp this member is timed out until
55    pub timeout: Option<Timestamp>,
56}
57
58/// Member List
59///
60/// Both lists are sorted by ID.
61#[derive(Deserialize, Debug, Clone)]
62pub struct MemberList {
63    /// List of members
64    pub members: Vec<Member>,
65    /// List of users
66    pub users: Vec<User>,
67}
68
69/// Optional fields on server member object
70#[derive(Serialize, Deserialize, Debug, PartialEq, Clone)]
71pub enum FieldsMember {
72    Nickname,
73    Avatar,
74    Roles,
75    Timeout,
76}