use super::CreateEmbed;
use ::model::ReactionType;
use ::internal::prelude::*;
#[derive(Clone, Debug)]
pub struct CreateMessage(pub Map<String, Value>, pub Option<Vec<ReactionType>>);
impl CreateMessage {
pub fn content(mut self, content: &str) -> Self {
self.0.insert("content".to_owned(), Value::String(content.to_owned()));
CreateMessage(self.0, self.1)
}
pub fn embed<F>(mut self, f: F) -> Self
where F: FnOnce(CreateEmbed) -> CreateEmbed {
let embed = Value::Object(f(CreateEmbed::default()).0);
self.0.insert("embed".to_owned(), embed);
CreateMessage(self.0, self.1)
}
pub fn tts(mut self, tts: bool) -> Self {
self.0.insert("tts".to_owned(), Value::Bool(tts));
CreateMessage(self.0, self.1)
}
pub fn reactions<R: Into<ReactionType>>(mut self, reactions: Vec<R>) -> Self {
self.1 = Some(reactions.into_iter().map(|r| r.into()).collect());
CreateMessage(self.0, self.1)
}
}
impl Default for CreateMessage {
fn default() -> CreateMessage {
let mut map = Map::default();
map.insert("tts".to_owned(), Value::Bool(false));
CreateMessage(map, None)
}
}