stoat-rs 0.2.5

Stoat API Wrapper
Documentation
use stoat_models::v0::{Category, DataEditServer, FieldsServer, Server, SystemMessageChannels};

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

pub struct EditServerBuilder {
    http: HttpClient,
    server_id: String,
    data: DataEditServer,
}

impl EditServerBuilder {
    pub fn new(http: HttpClient, server_id: String) -> Self {
        Self {
            http,
            server_id,
            data: DataEditServer {
                name: None,
                description: None,
                icon: None,
                banner: None,
                categories: None,
                system_messages: None,
                flags: None,
                discoverable: None,
                analytics: None,
                remove: Vec::new(),
            },
        }
    }

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

        self
    }

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

        self
    }

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

        self
    }

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

        self
    }

    pub fn categories(&mut self, categories: Option<Vec<Category>>) -> &mut Self {
        if categories.is_some() {
            self.data.categories = categories;
        } else {
            self.data.remove.push(FieldsServer::Categories);
        };

        self
    }

    pub fn system_messages(&mut self, system_messages: Option<SystemMessageChannels>) -> &mut Self {
        if system_messages.is_some() {
            self.data.system_messages = system_messages;
        } else {
            self.data.remove.push(FieldsServer::SystemMessages);
        };

        self
    }

    pub async fn build(&self) -> Result<Server, Error> {
        self.http.edit_server(&self.server_id, &self.data).await
    }
}