stoat/builders/
edit_user.rs1use stoat_models::v0::{DataEditUser, DataUserProfile, FieldsUser, Presence, User};
2
3use crate::{HttpClient, error::Error};
4
5pub struct EditUserBuilder {
6 http: HttpClient,
7 user_id: String,
8 data: DataEditUser,
9}
10
11impl EditUserBuilder {
12 pub fn new(http: HttpClient, user_id: String) -> Self {
13 Self {
14 http,
15 user_id,
16 data: DataEditUser {
17 display_name: None,
18 avatar: None,
19 status: None,
20 profile: None,
21 badges: None,
22 flags: None,
23 remove: Vec::new(),
24 },
25 }
26 }
27
28 pub fn display_name(&mut self, display_name: Option<String>) -> &mut Self {
29 if display_name.is_some() {
30 self.data.display_name = display_name;
31 } else {
32 self.data.remove.push(FieldsUser::DisplayName);
33 };
34
35 self
36 }
37
38 pub fn avatar(&mut self, avatar: Option<String>) -> &mut Self {
39 if avatar.is_some() {
40 self.data.avatar = avatar;
41 } else {
42 self.data.remove.push(FieldsUser::Avatar);
43 };
44
45 self
46 }
47
48 pub fn status_text(&mut self, text: Option<String>) -> &mut Self {
49 if text.is_some() {
50 self.data.status.get_or_insert_default().text = text;
51 } else {
52 self.data.remove.push(FieldsUser::StatusText);
53 };
54
55 self
56 }
57
58 pub fn status_presence(&mut self, presence: Option<Presence>) -> &mut Self {
59 if presence.is_some() {
60 self.data.status.get_or_insert_default().presence = presence;
61 } else {
62 self.data.remove.push(FieldsUser::StatusPresence);
63 };
64
65 self
66 }
67
68 pub fn profile_content(&mut self, content: Option<String>) -> &mut Self {
69 if content.is_some() {
70 self.data
71 .profile
72 .get_or_insert_with(|| DataUserProfile {
73 content: None,
74 background: None,
75 })
76 .content = content;
77 } else {
78 self.data.remove.push(FieldsUser::ProfileContent);
79 };
80
81 self
82 }
83
84 pub fn profile_background(&mut self, background: Option<String>) -> &mut Self {
85 if background.is_some() {
86 self.data
87 .profile
88 .get_or_insert_with(|| DataUserProfile {
89 content: None,
90 background: None,
91 })
92 .background = background;
93 } else {
94 self.data.remove.push(FieldsUser::ProfileBackground);
95 };
96
97 self
98 }
99
100 pub async fn build(&self) -> Result<User, Error> {
101 self.http.edit_user(&self.user_id, &self.data).await
102 }
103}