Skip to main content

stoat/builders/
edit_server.rs

1use 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}