use super::APIPermissionDemandIdentify;
use crate::models::{HasId, Snowflake};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
pub struct APIPermissionDemand {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub guild_id: Snowflake,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub channel_id: Snowflake,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub api_identify: Option<APIPermissionDemandIdentify>,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub title: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub desc: String,
}
impl APIPermissionDemand {
pub fn new(
guild_id: impl Into<String>,
channel_id: impl Into<String>,
api_identify: APIPermissionDemandIdentify,
desc: impl Into<String>,
) -> Self {
Self {
guild_id: guild_id.into(),
channel_id: channel_id.into(),
api_identify: Some(api_identify),
title: String::new(),
desc: desc.into(),
}
}
pub fn with_title(mut self, title: impl Into<String>) -> Self {
self.title = title.into();
self
}
pub fn api_path(&self) -> &str {
self.api_identify
.as_ref()
.map(|identify| identify.path.as_str())
.unwrap_or_default()
}
pub fn api_method(&self) -> &str {
self.api_identify
.as_ref()
.map(|identify| identify.method.as_str())
.unwrap_or_default()
}
}
impl HasId for APIPermissionDemand {
fn id(&self) -> Option<&Snowflake> {
Some(&self.guild_id)
}
}
impl std::fmt::Display for APIPermissionDemand {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"PermissionDemand {{ guild_id: {}, api: {}, desc: {} }}",
self.guild_id,
self.api_identify
.as_ref()
.map(ToString::to_string)
.unwrap_or_default(),
self.desc.chars().take(50).collect::<String>()
)
}
}