onechatsocial_models/v0/
servers.rs1use super::{Channel, File};
2
3use onechatsocial_permissions::OverrideField;
4use std::collections::HashMap;
5
6#[cfg(feature = "validator")]
7use validator::Validate;
8
9auto_derived_partial!(
10 pub struct Server {
12 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
14 pub id: String,
15 pub owner: String,
17
18 pub name: String,
20 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
22 pub description: Option<String>,
23
24 pub channels: Vec<String>,
27 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
29 pub categories: Option<Vec<Category>>,
30 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
32 pub system_messages: Option<SystemMessageChannels>,
33
34 #[cfg_attr(
36 feature = "serde",
37 serde(
38 default = "HashMap::<String, Role>::new",
39 skip_serializing_if = "HashMap::<String, Role>::is_empty"
40 )
41 )]
42 pub roles: HashMap<String, Role>,
43 pub default_permissions: i64,
45
46 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
48 pub icon: Option<File>,
49 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
51 pub banner: Option<File>,
52
53 #[cfg_attr(
55 feature = "serde",
56 serde(skip_serializing_if = "crate::if_zero_u32", default)
57 )]
58 pub flags: u32,
59
60 #[cfg_attr(
62 feature = "serde",
63 serde(skip_serializing_if = "crate::if_false", default)
64 )]
65 pub nsfw: bool,
66 #[cfg_attr(
68 feature = "serde",
69 serde(skip_serializing_if = "crate::if_false", default)
70 )]
71 pub analytics: bool,
72 #[cfg_attr(
74 feature = "serde",
75 serde(skip_serializing_if = "crate::if_false", default)
76 )]
77 pub discoverable: bool,
78 },
79 "PartialServer"
80);
81
82auto_derived_partial!(
83 pub struct Role {
85 pub name: String,
87 pub permissions: OverrideField,
89 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
93 pub colour: Option<String>,
94 #[cfg_attr(
96 feature = "serde",
97 serde(skip_serializing_if = "crate::if_false", default)
98 )]
99 pub hoist: bool,
100 #[cfg_attr(feature = "serde", serde(default))]
102 pub rank: i64,
103 },
104 "PartialRole"
105);
106
107auto_derived!(
108 pub enum FieldsServer {
110 Description,
111 Categories,
112 SystemMessages,
113 Icon,
114 Banner,
115 }
116
117 pub enum FieldsRole {
119 Colour,
120 }
121
122 pub struct Category {
124 pub id: String,
126 pub title: String,
128 pub channels: Vec<String>,
130 }
131
132 pub struct SystemMessageChannels {
134 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
136 pub user_joined: Option<String>,
137 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
139 pub user_left: Option<String>,
140 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
142 pub user_kicked: Option<String>,
143 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
145 pub user_banned: Option<String>,
146 }
147
148 #[derive(Default)]
150 #[cfg_attr(feature = "validator", derive(Validate))]
151 pub struct DataCreateServer {
152 #[cfg_attr(feature = "validator", validate(length(min = 1, max = 32)))]
154 pub name: String,
155 #[cfg_attr(feature = "validator", validate(length(min = 0, max = 1024)))]
157 pub description: Option<String>,
158 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
160 pub nsfw: Option<bool>,
161 }
162
163 pub struct CreateServerLegacyResponse {
165 pub server: Server,
167 pub channels: Vec<Channel>,
169 }
170);