discloud_rs/team_manager/
team_member.rs1use serde::Deserialize;
2
3use crate::Discloud;
4
5use super::TeamPerms;
6
7#[derive(Debug, Deserialize)]
8pub struct APITeamMember {
9 #[serde(rename = "modID")]
10 pub id: String,
11 pub perms: Vec<TeamPerms>,
12}
13
14#[derive(Debug, Clone, Deserialize)]
15pub struct TeamMember {
16 #[serde(rename = "modID")]
17 pub mod_id: String,
18 #[serde(rename = "appID")]
19 pub app_id: String,
20 pub perms: Vec<TeamPerms>,
21}
22
23impl TeamMember {
24 pub async fn remove(&self, client: &Discloud) -> Result<(), crate::Error> {
25 client.remove_app_mod(&self.app_id, &self.mod_id).await
26 }
27
28 pub async fn edit_perms_mut(
29 &mut self,
30 client: &Discloud,
31 perms: Vec<TeamPerms>,
32 ) -> Result<(), crate::Error> {
33 let res = client
34 .edit_app_mod(&self.app_id, &self.mod_id, perms)
35 .await?;
36
37 *self = res;
38
39 Ok(())
40 }
41
42 pub async fn edit_perms(
43 &self,
44 client: &Discloud,
45 perms: Vec<TeamPerms>,
46 ) -> Result<TeamMember, crate::Error> {
47 client.edit_app_mod(&self.app_id, &self.mod_id, perms).await
48 }
49
50 pub async fn add_perms_mut(
51 &mut self,
52 client: &Discloud,
53 perms: Vec<TeamPerms>,
54 ) -> Result<(), crate::Error> {
55 let mut new_perms = self.perms.clone();
56 new_perms.extend(perms);
57 new_perms.sort_unstable();
58 Vec::dedup(&mut new_perms);
59
60 let res = client
61 .edit_app_mod(&self.app_id, &self.mod_id, new_perms)
62 .await?;
63 *self = res;
64
65 Ok(())
66 }
67
68 pub async fn add_perms(
69 &self,
70 client: &Discloud,
71 perms: Vec<TeamPerms>,
72 ) -> Result<TeamMember, crate::Error> {
73 let mut new_perms = self.perms.clone();
74 new_perms.extend(perms);
75 new_perms.sort_unstable();
76 Vec::dedup(&mut new_perms);
77 client
78 .edit_app_mod(&self.app_id, &self.mod_id, new_perms)
79 .await
80 }
81}