use crate::models::Snowflake;
use crate::models::serde_helpers::option_is_none_or_default;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct ChannelPermissions {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub channel_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub user_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub permissions: String,
}
impl ChannelPermissions {
pub fn new() -> Self {
Self::default()
}
pub fn is_user_permission(&self) -> bool {
!self.user_id.is_empty()
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct ChannelRolesPermissions {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub channel_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub role_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub permissions: String,
}
impl ChannelRolesPermissions {
pub fn is_role_permission(&self) -> bool {
!self.role_id.is_empty()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct UpdateChannelPermissions {
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub add: Option<String>,
#[serde(skip_serializing_if = "option_is_none_or_default")]
pub remove: Option<String>,
}
impl UpdateChannelPermissions {
pub fn new(add: Option<impl ToString>, remove: Option<impl ToString>) -> Self {
Self {
add: add.map(|value| value.to_string()),
remove: remove.map(|value| value.to_string()),
}
}
pub fn validate(&self) -> crate::error::Result<()> {
if let Some(add) = self.add.as_deref() {
add.parse::<u64>().map_err(|err| {
crate::error::BotError::invalid_data(format!("invalid parameter add: {err}"))
})?;
}
if let Some(remove) = self.remove.as_deref() {
remove.parse::<u64>().map_err(|err| {
crate::error::BotError::invalid_data(format!("invalid parameter remove: {err}"))
})?;
}
Ok(())
}
}