Skip to content

Commit

Permalink
Allow unsized types in query, form and json
Browse files Browse the repository at this point in the history
  • Loading branch information
oli-obk committed Feb 1, 2018
1 parent f71504c commit f0b7749
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 6 deletions.
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ unstable = []
name = "simple"
path = "examples/simple.rs"

[[example]]
name = "form"
path = "examples/form.rs"

[[example]]
name = "async"
path = "examples/async.rs"
Expand Down
9 changes: 9 additions & 0 deletions examples/form.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
extern crate reqwest;

fn main() {
reqwest::Client::new()
.post("http://www.baidu.com")
.form(&[("one", "1")])
.send()
.unwrap();
}
6 changes: 3 additions & 3 deletions src/async_impl/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ impl RequestBuilder {
/// # Errors
/// This method will fail if the object you provide cannot be serialized
/// into a query string.
pub fn query<T: Serialize>(&mut self, query: &T) -> &mut RequestBuilder {
pub fn query<T: Serialize + ?Sized>(&mut self, query: &T) -> &mut RequestBuilder {
if let Some(req) = request_mut(&mut self.request, &self.err) {
let url = req.url_mut();
let mut pairs = url.query_pairs_mut();
Expand All @@ -158,7 +158,7 @@ impl RequestBuilder {
}

/// Send a form body.
pub fn form<T: Serialize>(&mut self, form: &T) -> &mut RequestBuilder {
pub fn form<T: Serialize + ?Sized>(&mut self, form: &T) -> &mut RequestBuilder {
if let Some(req) = request_mut(&mut self.request, &self.err) {
match serde_urlencoded::to_string(form) {
Ok(body) => {
Expand All @@ -177,7 +177,7 @@ impl RequestBuilder {
///
/// Serialization can fail if `T`'s implementation of `Serialize` decides to
/// fail, or if `T` contains a map with non-string keys.
pub fn json<T: Serialize>(&mut self, json: &T) -> &mut RequestBuilder {
pub fn json<T: Serialize + ?Sized>(&mut self, json: &T) -> &mut RequestBuilder {
if let Some(req) = request_mut(&mut self.request, &self.err) {
match serde_json::to_vec(json) {
Ok(body) => {
Expand Down
6 changes: 3 additions & 3 deletions src/request.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ impl RequestBuilder {
/// # Errors
/// This method will fail if the object you provide cannot be serialized
/// into a query string.
pub fn query<T: Serialize>(&mut self, query: &T) -> &mut RequestBuilder {
pub fn query<T: Serialize + ?Sized>(&mut self, query: &T) -> &mut RequestBuilder {
if let Some(req) = request_mut(&mut self.request, &self.err) {
let url = req.url_mut();
let mut pairs = url.query_pairs_mut();
Expand Down Expand Up @@ -279,7 +279,7 @@ impl RequestBuilder {
///
/// This method fails if the passed value cannot be serialized into
/// url encoded format
pub fn form<T: Serialize>(&mut self, form: &T) -> &mut RequestBuilder {
pub fn form<T: Serialize + ?Sized>(&mut self, form: &T) -> &mut RequestBuilder {
if let Some(req) = request_mut(&mut self.request, &self.err) {
match serde_urlencoded::to_string(form) {
Ok(body) => {
Expand Down Expand Up @@ -317,7 +317,7 @@ impl RequestBuilder {
///
/// Serialization can fail if `T`'s implementation of `Serialize` decides to
/// fail, or if `T` contains a map with non-string keys.
pub fn json<T: Serialize>(&mut self, json: &T) -> &mut RequestBuilder {
pub fn json<T: Serialize + ?Sized>(&mut self, json: &T) -> &mut RequestBuilder {
if let Some(req) = request_mut(&mut self.request, &self.err) {
match serde_json::to_vec(json) {
Ok(body) => {
Expand Down

0 comments on commit f0b7749

Please sign in to comment.