1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use std::collections::HashMap;
use super::CreateAllowedMentions;
use crate::builder::CreateComponents;
use crate::internal::prelude::*;
use crate::json;
/// A builder to specify the fields to edit in an existing [`Webhook`]'s message.
///
/// [`Webhook`]: crate::model::webhook::Webhook
#[derive(Clone, Debug, Default)]
pub struct EditWebhookMessage(pub HashMap<&'static str, Value>);
impl EditWebhookMessage {
/// Set the content of the message.
///
/// **Note**: Message contents must be under 2000 unicode code points.
#[inline]
pub fn content<D: ToString>(&mut self, content: D) -> &mut Self {
self.0.insert("content", Value::from(content.to_string()));
self
}
/// Set the embeds associated with the message.
///
/// This should be used in combination with [`Embed::fake`], creating one
/// or more fake embeds to send to the API.
///
/// # Examples
///
/// Refer to [struct-level documentation of `ExecuteWebhook`] for an example
/// on how to use embeds.
///
/// [`Embed::fake`]: crate::model::channel::Embed::fake
/// [struct-level documentation of `ExecuteWebhook`]: crate::builder::ExecuteWebhook#examples
#[inline]
pub fn embeds(&mut self, embeds: Vec<Value>) -> &mut Self {
self.0.insert("embeds", Value::from(embeds));
self
}
/// Set the allowed mentions for the message.
pub fn allowed_mentions<F>(&mut self, f: F) -> &mut Self
where
F: FnOnce(&mut CreateAllowedMentions) -> &mut CreateAllowedMentions,
{
let mut allowed_mentions = CreateAllowedMentions::default();
f(&mut allowed_mentions);
let map = json::hashmap_to_json_map(allowed_mentions.0);
let allowed_mentions = Value::from(map);
self.0.insert("allowed_mentions", allowed_mentions);
self
}
/// Creates components for this message. Requires an application-owned webhook, meaning either
/// the webhook's `kind` field is set to [`WebhookType::Application`], or it was created by an
/// application (and has kind [`WebhookType::Incoming`]).
///
/// [`WebhookType::Application`]: crate::model::webhook::WebhookType
/// [`WebhookType::Incoming`]: crate::model::webhook::WebhookType
pub fn components<F>(&mut self, f: F) -> &mut Self
where
F: FnOnce(&mut CreateComponents) -> &mut CreateComponents,
{
let mut components = CreateComponents::default();
f(&mut components);
self.0.insert("components", Value::from(components.0));
self
}
/// Sets the components of this message. Requires an application-owned webhook. See
/// [`components`] for details.
///
/// [`components`]: crate::builder::EditWebhookMessage::components
pub fn set_components(&mut self, components: CreateComponents) -> &mut Self {
self.0.insert("components", Value::Array(components.0));
self
}
}