use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::json::prelude::*;
use crate::model::id::{RoleId, UserId};
#[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 {
let val = self.0.entry("parse").or_insert_with(|| Value::from(Vec::<Value>::new()));
let arr = val.as_array_mut().expect("Must be an array");
arr.push(json![value]);
self
}
#[inline]
pub fn empty_parse(&mut self) -> &mut Self {
let val = self.0.entry("parse").or_insert_with(|| Value::from(Vec::<Value>::new()));
let arr = val.as_array_mut().expect("Must be an array");
arr.clear();
self
}
#[inline]
pub fn users<U: Into<UserId>>(&mut self, users: impl IntoIterator<Item = U>) -> &mut Self {
self.0.insert(
"users",
Value::from({
users.into_iter().map(|i| json!(i.into().to_string())).collect::<Vec<_>>()
}),
);
self
}
#[inline]
pub fn empty_users(&mut self) -> &mut Self {
let val = self.0.entry("users").or_insert_with(|| Value::from(Vec::<Value>::new()));
let arr = val.as_array_mut().expect("Must be an array");
arr.clear();
self
}
#[inline]
pub fn roles<R: Into<RoleId>>(&mut self, roles: impl IntoIterator<Item = R>) -> &mut Self {
self.0.insert(
"roles",
Value::from({
roles.into_iter().map(|i| json!(i.into().to_string())).collect::<Vec<_>>()
}),
);
self
}
#[inline]
pub fn empty_roles(&mut self) -> &mut Self {
let val = self.0.entry("roles").or_insert_with(|| Value::from(Vec::<Value>::new()));
let arr = val.as_array_mut().expect("Must be an array");
arr.clear();
self
}
#[inline]
pub fn replied_user(&mut self, mention_user: bool) -> &mut Self {
self.0.insert("replied_user", Value::from(mention_user));
self
}
}
impl Default for CreateAllowedMentions {
fn default() -> CreateAllowedMentions {
let map = HashMap::new();
CreateAllowedMentions(map)
}
}