diff options
| author | Zeyla Hellyer <[email protected]> | 2017-06-20 11:28:52 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-06-20 11:28:52 -0700 |
| commit | dc73d1a4bad07b453a9d60a6c8f8c187a7e42450 (patch) | |
| tree | 8c8c4b86e371f8d3dd4262ac8d96b4cda672b9ad /src/http | |
| parent | Fix broken docs links on Permissions struct (diff) | |
| download | serenity-dc73d1a4bad07b453a9d60a6c8f8c187a7e42450.tar.xz serenity-dc73d1a4bad07b453a9d60a6c8f8c187a7e42450.zip | |
Add 'wait' parameter to http::execute_webhook
The 'wait' parameter allows you to specify waiting for the Message to be
sent prior to receiving a response, which will have Discord include the
JSON representation of the Message in the body.
Diffstat (limited to 'src/http')
| -rw-r--r-- | src/http/mod.rs | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/http/mod.rs b/src/http/mod.rs index 0dce8c8..8dcc76b 100644 --- a/src/http/mod.rs +++ b/src/http/mod.rs @@ -37,7 +37,9 @@ use hyper::client::{ Response as HyperResponse, Request, }; +use hyper::header::ContentType; use hyper::method::Method; +use hyper::mime::{Mime, SubLevel, TopLevel}; use hyper::net::HttpsConnector; use hyper::{Error as HyperError, Result as HyperResult, Url, header}; use hyper_native_tls::NativeTlsClient; @@ -803,28 +805,41 @@ pub fn edit_webhook_with_token(webhook_id: u64, token: &str, map: &JsonMap) -> R /// let token = "ig5AO-wdVWpCBtUUMxmgsWryqgsW3DChbKYOINftJ4DCrUbnkedoYZD0VOH1QLr-S3sV"; /// let map = ObjectBuilder::new().insert("content", "test").build(); /// -/// let message = match http::execute_webhook(id, token, map) { -/// Ok(message) => message, +/// let message = match http::execute_webhook(id, token, true, map) { +/// Ok(Some(message)) => message, +/// Ok(None) => { +/// println!("Expected a webhook message"); +/// +/// return; +/// }, /// Err(why) => { /// println!("Error executing webhook: {:?}", why); /// /// return; /// }, /// }; +/// ``` /// /// [`Channel`]: ../model/enum.Channel.html /// [`Message`]: ../model/struct.Message.html /// [Discord docs]: https://discordapp.com/developers/docs/resources/webhook#querystring-params -pub fn execute_webhook(webhook_id: u64, token: &str, map: &JsonMap) -> Result<Message> { +pub fn execute_webhook(webhook_id: u64, token: &str, wait: bool, map: &JsonMap) + -> Result<Option<Message>> { let body = serde_json::to_string(map)?; + let client = request_client!(); let response = retry(|| client - .post(&format!(api!("/webhooks/{}/{}"), webhook_id, token)) - .body(&body)) + .post(&format!(api!("/webhooks/{}/{}?wait={}"), webhook_id, token, wait)) + .body(&body) + .header(ContentType(Mime(TopLevel::Application, SubLevel::Json, vec![])))) .map_err(Error::Hyper)?; - serde_json::from_reader::<HyperResponse, Message>(response).map_err(From::from) + if response.status == StatusCode::NoContent { + return Ok(None); + } + + serde_json::from_reader::<HyperResponse, Message>(response).map(Some).map_err(From::from) } /// Gets the active maintenances from Discord's Status API. |