use serde::{Deserialize, Serialize};
fn insert_query_param(
query: &mut std::collections::HashMap<String, String>,
key: &str,
value: &Option<String>,
) {
if let Some(value) = value.as_ref().filter(|value| !value.is_empty()) {
query.insert(key.to_string(), value.clone());
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MessagePagerType {
Around,
Before,
After,
}
impl MessagePagerType {
pub const fn as_str(self) -> &'static str {
match self {
Self::Around => "around",
Self::Before => "before",
Self::After => "after",
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct MessagesPager {
#[serde(skip)]
pub pager_type: Option<MessagePagerType>,
#[serde(skip)]
pub id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
}
impl MessagesPager {
pub fn query_params(&self) -> std::collections::HashMap<String, String> {
let mut query = std::collections::HashMap::new();
insert_query_param(&mut query, "limit", &self.limit);
if let Some(pager_type) = self.pager_type {
insert_query_param(&mut query, pager_type.as_str(), &self.id);
}
query
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct SettingGuide {
pub guild_id: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct SettingGuideToCreate {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub setting_guide: Option<SettingGuide>,
}