use serde::{Deserialize, Serialize};
use std::collections::HashMap;
fn insert_query_param(query: &mut 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, PartialEq, Serialize, Deserialize, Default)]
pub struct GuildMembersPager {
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
}
impl GuildMembersPager {
pub fn query_params(&self) -> HashMap<String, String> {
let mut query = HashMap::new();
insert_query_param(&mut query, "limit", &self.limit);
insert_query_param(&mut query, "after", &self.after);
query
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct GuildRoleMembersPager {
#[serde(skip_serializing_if = "Option::is_none")]
pub start_index: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
}
impl GuildRoleMembersPager {
pub fn query_params(&self) -> HashMap<String, String> {
let mut query = HashMap::new();
insert_query_param(&mut query, "limit", &self.limit);
insert_query_param(&mut query, "start_index", &self.start_index);
query
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct GuildPager {
#[serde(skip_serializing_if = "Option::is_none")]
pub before: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub after: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<String>,
}
impl GuildPager {
pub fn query_params(&self) -> HashMap<String, String> {
let mut query = HashMap::new();
insert_query_param(&mut query, "limit", &self.limit);
insert_query_param(&mut query, "after", &self.after);
if !query.contains_key("after") {
insert_query_param(&mut query, "before", &self.before);
}
query
}
}