use crate::model::id::{UserId, RoleId};
use serde_json::{json, Value};
use serde::{Serialize, Deserialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ParseValue {
#[serde(rename = "everyone")]
Everyone,
#[serde(rename = "users")]
Users,
#[serde(rename = "roles")]
Roles,
}
#[derive(Clone, Debug)]
pub struct CreateAllowedMentions(pub HashMap<&'static str, Value>);
impl CreateAllowedMentions {
#[inline]
pub fn parse(&mut self, value: ParseValue) -> &mut Self {
if let Some(val) = self.0.get_mut("parse") {
val.as_array_mut().unwrap().push(json![value]);
} else {
self.0.insert("parse", Value::Array(vec![json!(value)]));
}
self
}
#[inline]
pub fn empty_parse(&mut self) -> &mut Self {
if let Some(val) = self.0.get_mut("parse") {
val.as_array_mut().unwrap().clear();
} else {
self.0.insert("parse", Value::Array(vec![]));
}
self
}
#[inline]
pub fn users<U: Into<UserId>>(&mut self, users: impl IntoIterator<Item = U>) -> &mut Self {
self.0.insert("users", Value::Array({
users.into_iter().map(|i| json!(i.into().to_string())).collect::<Vec<_>>()
}));
self
}
#[inline]
pub fn empty_users(&mut self) -> &mut Self {
if let Some(val) = self.0.get_mut("users") {
val.as_array_mut().unwrap().clear();
} else {
self.0.insert("users", Value::Array(vec![]));
}
self
}
#[inline]
pub fn roles<R: Into<RoleId>>(&mut self, users: impl IntoIterator<Item = R>) -> &mut Self {
self.0.insert("roles", Value::Array({
users.into_iter().map(|i| json!(i.into().to_string())).collect::<Vec<_>>()
}));
self
}
#[inline]
pub fn empty_roles(&mut self) -> &mut Self {
if let Some(val) = self.0.get_mut("roles") {
val.as_array_mut().unwrap().clear();
} else {
self.0.insert("roles", Value::Array(vec![]));
}
self
}
}
impl Default for CreateAllowedMentions {
fn default() -> CreateAllowedMentions {
let map = HashMap::new();
CreateAllowedMentions(map)
}
}