revolt_models/v0/
server_members.rs1use std::collections::HashMap;
2
3use super::{File, Role, User};
4
5use iso8601_timestamp::Timestamp;
6use once_cell::sync::Lazy;
7use regex::Regex;
8
9#[cfg(feature = "validator")]
10use validator::Validate;
11
12#[cfg(feature = "rocket")]
13use rocket::FromForm;
14
15pub static RE_COLOUR: Lazy<Regex> = Lazy::new(|| {
31 Regex::new(r"(?i)^(?:[a-z ]+|var\(--[a-z\d-]+\)|rgba?\([\d, ]+\)|#[a-f0-9]+|(repeating-)?(linear|conic|radial)-gradient\(([a-z ]+|var\(--[a-z\d-]+\)|rgba?\([\d, ]+\)|#[a-f0-9]+|\d+deg)([ ]+(\d{1,3}%|0))?(,[ ]*([a-z ]+|var\(--[a-z\d-]+\)|rgba?\([\d, ]+\)|#[a-f0-9]+)([ ]+(\d{1,3}%|0))?)+\))$").unwrap()
32});
33
34auto_derived_partial!(
35 pub struct Member {
37 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
39 pub id: MemberCompositeKey,
40
41 pub joined_at: Timestamp,
43
44 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
46 pub nickname: Option<String>,
47 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
49 pub avatar: Option<File>,
50
51 #[cfg_attr(
53 feature = "serde",
54 serde(skip_serializing_if = "Vec::is_empty", default)
55 )]
56 pub roles: Vec<String>,
57 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
59 pub timeout: Option<Timestamp>,
60 },
61 "PartialMember"
62);
63
64auto_derived!(
65 #[derive(Hash, Default)]
67 pub struct MemberCompositeKey {
68 pub server: String,
70 pub user: String,
72 }
73
74 pub enum FieldsMember {
76 Nickname,
77 Avatar,
78 Roles,
79 Timeout,
80 }
81
82 pub enum RemovalIntention {
84 Leave,
85 Kick,
86 Ban,
87 }
88
89 #[serde(untagged)]
91 pub enum MemberResponse {
92 Member(Member),
93 MemberWithRoles {
94 member: Member,
95 roles: HashMap<String, Role>,
96 },
97 }
98
99 #[cfg_attr(feature = "rocket", derive(FromForm))]
101 pub struct OptionsFetchAllMembers {
102 pub exclude_offline: Option<bool>,
104 }
105
106 pub struct AllMemberResponse {
108 pub members: Vec<Member>,
110 pub users: Vec<User>,
112 }
113
114 #[cfg_attr(feature = "validator", derive(Validate))]
116 pub struct DataMemberEdit {
117 #[cfg_attr(feature = "validator", validate(length(min = 1, max = 32)))]
119 pub nickname: Option<String>,
120 pub avatar: Option<String>,
122 pub roles: Option<Vec<String>>,
124 pub timeout: Option<Timestamp>,
126 #[cfg_attr(feature = "validator", validate(length(min = 1)))]
128 pub remove: Option<Vec<FieldsMember>>,
129 }
130);