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
use super::execute_webhook::ExecuteWebhook;
use crate::response::ResponseFuture;
use twilight_model::channel::Message;
/// Execute a webhook, sending a message to its channel, and then wait for the
/// message to be created.
///
/// # Examples
///
/// ```rust,no_run
/// use twilight_http::Client;
/// use twilight_model::id::WebhookId;
///
/// # #[tokio::main]
/// # async fn main() -> Result<(), Box<dyn std::error::Error>> {
/// let client = Client::new("my token".to_owned());
/// let id = WebhookId::new(432).expect("non zero");
///
/// let message = client
/// .execute_webhook(id, "webhook token")
/// .content("Pinkie...")
/// .wait()
/// .exec()
/// .await?
/// .model()
/// .await?;
///
/// println!("message id: {}", message.id);
/// # Ok(()) }
/// ```
///
/// [`content`]: Self::content
/// [`embeds`]: Self::embeds
/// [`file`]: Self::file
#[must_use = "requests must be configured and executed"]
pub struct ExecuteWebhookAndWait<'a> {
inner: ExecuteWebhook<'a>,
}
impl<'a> ExecuteWebhookAndWait<'a> {
pub(crate) const fn new(inner: ExecuteWebhook<'a>) -> Self {
Self { inner }
}
/// Execute the request, returning a future resolving to a [`Response`].
///
/// [`Response`]: crate::response::Response
pub fn exec(self) -> ResponseFuture<Message> {
match self.inner.request(false) {
Ok(request) => self.inner.http.request(request),
Err(source) => ResponseFuture::error(source),
}
}
}