discloud_rs/team_manager/
team_member.rs

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