stoat/builders/
edit_server.rs1use stoat_models::v0::{Category, DataEditServer, FieldsServer, Server, SystemMessageChannels};
2
3use crate::{HttpClient, error::Error};
4
5pub struct EditServerBuilder {
6 http: HttpClient,
7 server_id: String,
8 data: DataEditServer,
9}
10
11impl EditServerBuilder {
12 pub fn new(http: HttpClient, server_id: String) -> Self {
13 Self {
14 http,
15 server_id,
16 data: DataEditServer {
17 name: None,
18 description: None,
19 icon: None,
20 banner: None,
21 categories: None,
22 system_messages: None,
23 flags: None,
24 discoverable: None,
25 analytics: None,
26 remove: Vec::new(),
27 },
28 }
29 }
30
31 pub fn name(&mut self, name: String) -> &mut Self {
32 self.data.name = Some(name);
33
34 self
35 }
36
37 pub fn description(&mut self, description: Option<String>) -> &mut Self {
38 if description.is_some() {
39 self.data.description = description;
40 } else {
41 self.data.remove.push(FieldsServer::Description);
42 };
43
44 self
45 }
46
47 pub fn icon(&mut self, icon: Option<String>) -> &mut Self {
48 if icon.is_some() {
49 self.data.icon = icon;
50 } else {
51 self.data.remove.push(FieldsServer::Icon);
52 };
53
54 self
55 }
56
57 pub fn banner(&mut self, banner: Option<String>) -> &mut Self {
58 if banner.is_some() {
59 self.data.banner = banner;
60 } else {
61 self.data.remove.push(FieldsServer::Banner);
62 };
63
64 self
65 }
66
67 pub fn categories(&mut self, categories: Option<Vec<Category>>) -> &mut Self {
68 if categories.is_some() {
69 self.data.categories = categories;
70 } else {
71 self.data.remove.push(FieldsServer::Categories);
72 };
73
74 self
75 }
76
77 pub fn system_messages(&mut self, system_messages: Option<SystemMessageChannels>) -> &mut Self {
78 if system_messages.is_some() {
79 self.data.system_messages = system_messages;
80 } else {
81 self.data.remove.push(FieldsServer::SystemMessages);
82 };
83
84 self
85 }
86
87 pub async fn build(&self) -> Result<Server, Error> {
88 self.http.edit_server(&self.server_id, &self.data).await
89 }
90}