use serde::Serialize;
use crate::models::{
events::{MemberField, ServerField},
Category, Id, SystemMessageChannels,
};
#[derive(Debug, Clone, Default, Serialize)]
pub struct EditServer {
#[serde(skip_serializing_if = "Option::is_none")]
name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
icon: Option<Id>,
#[serde(skip_serializing_if = "Option::is_none")]
banner: Option<Id>,
#[serde(skip_serializing_if = "Vec::is_empty")]
categories: Vec<Category>,
#[serde(skip_serializing_if = "Option::is_none")]
system_messages: Option<SystemMessageChannels>,
#[serde(skip_serializing_if = "Option::is_none")]
nsfw: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
remove: Option<ServerField>,
}
impl EditServer {
pub fn new() -> Self {
Self::default()
}
pub fn name(mut self, name: impl Into<String>) -> Self {
self.name = Some(name.into());
self
}
pub fn description(mut self, description: impl Into<String>) -> Self {
self.description = Some(description.into());
self
}
pub fn icon(mut self, id: &Id) -> Self {
self.icon = Some(id.clone());
self
}
pub fn banner(mut self, id: &Id) -> Self {
self.banner = Some(id.clone());
self
}
pub fn category(mut self, category: &Category) -> Self {
self.categories.push(category.clone());
self
}
pub fn system_messages(
mut self,
build: impl Fn(SystemMessageChannels) -> SystemMessageChannels,
) -> Self {
self.system_messages = Some(build(SystemMessageChannels::default()));
self
}
pub fn nsfw(mut self, nsfw: bool) -> Self {
self.nsfw = Some(nsfw);
self
}
pub fn remove(mut self, field: ServerField) -> Self {
self.remove = Some(field);
self
}
}
#[derive(Debug, Clone, Default, Serialize)]
pub struct EditMember {
#[serde(skip_serializing_if = "Option::is_none")]
nickname: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
avatar: Option<Id>,
#[serde(skip_serializing_if = "Vec::is_empty")]
roles: Vec<Id>,
#[serde(skip_serializing_if = "Option::is_none")]
remove: Option<MemberField>,
}
impl EditMember {
pub fn new() -> Self {
Self::default()
}
pub fn nickname(mut self, nickname: impl Into<String>) -> Self {
self.nickname = Some(nickname.into());
self
}
pub fn avatar(mut self, id: &Id) -> Self {
self.avatar = Some(id.clone());
self
}
pub fn role(mut self, id: &Id) -> Self {
self.roles.push(id.clone());
self
}
pub fn remove(mut self, field: MemberField) -> Self {
self.remove = Some(field);
self
}
}