allow send_json to send any serde::Serialize value
This commit is contained in:
14
src/body.rs
14
src/body.rs
@@ -7,17 +7,12 @@ use crate::response::DEFAULT_CHARACTER_SET;
|
|||||||
#[cfg(feature = "charset")]
|
#[cfg(feature = "charset")]
|
||||||
use encoding_rs::Encoding;
|
use encoding_rs::Encoding;
|
||||||
|
|
||||||
#[cfg(feature = "json")]
|
|
||||||
use super::SerdeValue;
|
|
||||||
|
|
||||||
/// The different kinds of bodies to send.
|
/// The different kinds of bodies to send.
|
||||||
///
|
///
|
||||||
/// *Internal API*
|
/// *Internal API*
|
||||||
pub(crate) enum Payload<'a> {
|
pub(crate) enum Payload<'a> {
|
||||||
Empty,
|
Empty,
|
||||||
Text(&'a str, String),
|
Text(&'a str, String),
|
||||||
#[cfg(feature = "json")]
|
|
||||||
JSON(SerdeValue),
|
|
||||||
Reader(Box<dyn Read + 'a>),
|
Reader(Box<dyn Read + 'a>),
|
||||||
Bytes(&'a [u8]),
|
Bytes(&'a [u8]),
|
||||||
}
|
}
|
||||||
@@ -27,8 +22,6 @@ impl fmt::Debug for Payload<'_> {
|
|||||||
match self {
|
match self {
|
||||||
Payload::Empty => write!(f, "Empty"),
|
Payload::Empty => write!(f, "Empty"),
|
||||||
Payload::Text(t, _) => write!(f, "{}", t),
|
Payload::Text(t, _) => write!(f, "{}", t),
|
||||||
#[cfg(feature = "json")]
|
|
||||||
Payload::JSON(_) => write!(f, "JSON"),
|
|
||||||
Payload::Reader(_) => write!(f, "Reader"),
|
Payload::Reader(_) => write!(f, "Reader"),
|
||||||
Payload::Bytes(v) => write!(f, "{:?}", v),
|
Payload::Bytes(v) => write!(f, "{:?}", v),
|
||||||
}
|
}
|
||||||
@@ -89,13 +82,6 @@ impl<'a> Payload<'a> {
|
|||||||
let cursor = Cursor::new(bytes);
|
let cursor = Cursor::new(bytes);
|
||||||
SizedReader::new(BodySize::Known(len as u64), Box::new(cursor))
|
SizedReader::new(BodySize::Known(len as u64), Box::new(cursor))
|
||||||
}
|
}
|
||||||
#[cfg(feature = "json")]
|
|
||||||
Payload::JSON(v) => {
|
|
||||||
let bytes = serde_json::to_vec(&v).expect("Bad JSON in payload");
|
|
||||||
let len = bytes.len();
|
|
||||||
let cursor = Cursor::new(bytes);
|
|
||||||
SizedReader::new(BodySize::Known(len as u64), Box::new(cursor))
|
|
||||||
}
|
|
||||||
Payload::Reader(read) => SizedReader::new(BodySize::Unknown, read),
|
Payload::Reader(read) => SizedReader::new(BodySize::Unknown, read),
|
||||||
Payload::Bytes(bytes) => {
|
Payload::Bytes(bytes) => {
|
||||||
let len = bytes.len();
|
let len = bytes.len();
|
||||||
|
|||||||
@@ -9,9 +9,6 @@ use crate::unit::{self, Unit};
|
|||||||
use crate::Response;
|
use crate::Response;
|
||||||
use crate::{agent::Agent, error::Error};
|
use crate::{agent::Agent, error::Error};
|
||||||
|
|
||||||
#[cfg(feature = "json")]
|
|
||||||
use super::SerdeValue;
|
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
|
|
||||||
/// Request instances are builders that creates a request.
|
/// Request instances are builders that creates a request.
|
||||||
@@ -140,11 +137,15 @@ impl Request {
|
|||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
#[cfg(feature = "json")]
|
#[cfg(feature = "json")]
|
||||||
pub fn send_json(mut self, data: SerdeValue) -> Result<Response> {
|
pub fn send_json(mut self, data: impl serde::Serialize) -> Result<Response> {
|
||||||
if self.header("Content-Type").is_none() {
|
if self.header("Content-Type").is_none() {
|
||||||
self = self.set("Content-Type", "application/json");
|
self = self.set("Content-Type", "application/json");
|
||||||
}
|
}
|
||||||
self.do_call(Payload::JSON(data))
|
|
||||||
|
let json_bytes = serde_json::to_vec(&data)
|
||||||
|
.expect("Failed to serialze data passed to send_json into JSON");
|
||||||
|
|
||||||
|
self.do_call(Payload::Bytes(&json_bytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Send data as bytes.
|
/// Send data as bytes.
|
||||||
|
|||||||
@@ -38,10 +38,10 @@ fn content_length_on_json() {
|
|||||||
let mut json = SerdeMap::new();
|
let mut json = SerdeMap::new();
|
||||||
json.insert(
|
json.insert(
|
||||||
"Hello".to_string(),
|
"Hello".to_string(),
|
||||||
SerdeValue::String("World!!!".to_string()),
|
serde_json::Value::String("World!!!".to_string()),
|
||||||
);
|
);
|
||||||
let resp = post("test://host/content_length_on_json")
|
let resp = post("test://host/content_length_on_json")
|
||||||
.send_json(SerdeValue::Object(json))
|
.send_json(serde_json::Value::Object(json))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let vec = resp.as_write_vec();
|
let vec = resp.as_write_vec();
|
||||||
let s = String::from_utf8_lossy(&vec);
|
let s = String::from_utf8_lossy(&vec);
|
||||||
@@ -90,10 +90,10 @@ fn content_type_on_json() {
|
|||||||
let mut json = SerdeMap::new();
|
let mut json = SerdeMap::new();
|
||||||
json.insert(
|
json.insert(
|
||||||
"Hello".to_string(),
|
"Hello".to_string(),
|
||||||
SerdeValue::String("World!!!".to_string()),
|
serde_json::Value::String("World!!!".to_string()),
|
||||||
);
|
);
|
||||||
let resp = post("test://host/content_type_on_json")
|
let resp = post("test://host/content_type_on_json")
|
||||||
.send_json(SerdeValue::Object(json))
|
.send_json(serde_json::Value::Object(json))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let vec = resp.as_write_vec();
|
let vec = resp.as_write_vec();
|
||||||
let s = String::from_utf8_lossy(&vec);
|
let s = String::from_utf8_lossy(&vec);
|
||||||
@@ -109,11 +109,11 @@ fn content_type_not_overriden_on_json() {
|
|||||||
let mut json = SerdeMap::new();
|
let mut json = SerdeMap::new();
|
||||||
json.insert(
|
json.insert(
|
||||||
"Hello".to_string(),
|
"Hello".to_string(),
|
||||||
SerdeValue::String("World!!!".to_string()),
|
serde_json::Value::String("World!!!".to_string()),
|
||||||
);
|
);
|
||||||
let resp = post("test://host/content_type_not_overriden_on_json")
|
let resp = post("test://host/content_type_not_overriden_on_json")
|
||||||
.set("content-type", "text/plain")
|
.set("content-type", "text/plain")
|
||||||
.send_json(SerdeValue::Object(json))
|
.send_json(serde_json::Value::Object(json))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let vec = resp.as_write_vec();
|
let vec = resp.as_write_vec();
|
||||||
let s = String::from_utf8_lossy(&vec);
|
let s = String::from_utf8_lossy(&vec);
|
||||||
|
|||||||
Reference in New Issue
Block a user