stoat-rs 0.2.5

Stoat API Wrapper
Documentation
use stoat_models::v0::{DataEditWebhook, FieldsWebhook, Webhook};

use crate::{HttpClient, error::Error};

pub struct EditWebhookBuilder {
    http: HttpClient,
    webhook_id: String,
    token: Option<String>,
    data: DataEditWebhook,
}

impl EditWebhookBuilder {
    pub fn new(http: HttpClient, webhook_id: String, token: Option<String>) -> Self {
        Self {
            http,
            webhook_id,
            token,
            data: DataEditWebhook {
                name: None,
                avatar: None,
                permissions: None,
                remove: Vec::new(),
            },
        }
    }

    pub fn avatar(&mut self, avatar: Option<String>) -> &mut Self {
        if avatar.is_some() {
            self.data.avatar = avatar;
        } else {
            self.data.remove.push(FieldsWebhook::Avatar);
        };

        self
    }

    pub fn name(&mut self, name: String) -> &mut Self {
        self.data.name = Some(name);

        self
    }

    pub fn permissions(&mut self, permissions: u64) -> &mut Self {
        self.data.permissions = Some(permissions);

        self
    }

    pub async fn build(&self) -> Result<Webhook, Error> {
        if let Some(token) = &self.token {
            self.http
                .edit_webhook_token(&self.webhook_id, &self.data, token)
                .await
        } else {
            self.http.edit_webhook(&self.webhook_id, &self.data).await
        }
    }
}