From d4a88a8d35ba482ed5fc766666a3fff65c3ff746 Mon Sep 17 00:00:00 2001 From: Paolo Barbolini Date: Thu, 20 Feb 2020 19:22:03 +0100 Subject: [PATCH] Implement `RequestBuilder::json` for `wasm32` target (#812) --- src/wasm/request.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/wasm/request.rs b/src/wasm/request.rs index 598e54d..8ea1bb1 100644 --- a/src/wasm/request.rs +++ b/src/wasm/request.rs @@ -3,9 +3,13 @@ use std::fmt; use http::Method; use url::Url; +#[cfg(feature = "json")] +use serde::Serialize; use super::{Body, Client, Response}; use crate::header::{HeaderMap, HeaderName, HeaderValue}; +#[cfg(feature = "json")] +use crate::header::CONTENT_TYPE; /// A request which can be executed with `Client::execute()`. pub struct Request { @@ -87,6 +91,26 @@ impl RequestBuilder { RequestBuilder { client, request } } + #[cfg(feature = "json")] + /// Set the request json + pub fn json(mut self, json: &T) -> RequestBuilder { + let mut error = None; + if let Ok(ref mut req) = self.request { + match serde_json::to_vec(json) { + Ok(body) => { + req.headers_mut() + .insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); + *req.body_mut() = Some(body.into()); + } + Err(err) => error = Some(crate::error::builder(err)), + } + } + if let Some(err) = error { + self.request = Err(err); + } + self + } + /// Set the request body. pub fn body>(mut self, body: T) -> RequestBuilder { if let Ok(ref mut req) = self.request {