discloud-rs 0.3.0-alpha

A rust wrapper for Discloud's API
Documentation
use serde::Deserialize;

use crate::Discloud;

use super::TeamPerms;

#[derive(Debug, Deserialize)]
pub struct APITeamMember {
    #[serde(rename = "modID")]
    pub id: String,
    pub perms: Vec<TeamPerms>,
}

#[derive(Debug, Clone, Deserialize)]
pub struct TeamMember {
    #[serde(rename = "modID")]
    pub mod_id: String,
    #[serde(rename = "appID")]
    pub app_id: String,
    pub perms: Vec<TeamPerms>,
}

impl TeamMember {
    pub async fn remove(&self, client: &Discloud) -> Result<(), crate::Error> {
        client.remove_app_mod(&self.app_id, &self.mod_id).await
    }

    pub async fn edit_perms_mut(
        &mut self,
        client: &Discloud,
        perms: Vec<TeamPerms>,
    ) -> Result<(), crate::Error> {
        let res = client
            .edit_app_mod(&self.app_id, &self.mod_id, perms)
            .await?;

        *self = res;

        Ok(())
    }

    pub async fn edit_perms(
        &self,
        client: &Discloud,
        perms: Vec<TeamPerms>,
    ) -> Result<TeamMember, crate::Error> {
        client.edit_app_mod(&self.app_id, &self.mod_id, perms).await
    }

    pub async fn add_perms_mut(
        &mut self,
        client: &Discloud,
        perms: Vec<TeamPerms>,
    ) -> Result<(), crate::Error> {
        let mut new_perms = self.perms.clone();
        new_perms.extend(perms);
        new_perms.sort_unstable();
        Vec::dedup(&mut new_perms);

        let res = client
            .edit_app_mod(&self.app_id, &self.mod_id, new_perms)
            .await?;
        *self = res;

        Ok(())
    }

    pub async fn add_perms(
        &self,
        client: &Discloud,
        perms: Vec<TeamPerms>,
    ) -> Result<TeamMember, crate::Error> {
        let mut new_perms = self.perms.clone();
        new_perms.extend(perms);
        new_perms.sort_unstable();
        Vec::dedup(&mut new_perms);
        client
            .edit_app_mod(&self.app_id, &self.mod_id, new_perms)
            .await
    }
}