diff --git a/src/body.rs b/src/body.rs index 50985f7..2eba430 100644 --- a/src/body.rs +++ b/src/body.rs @@ -23,19 +23,19 @@ pub(crate) enum Payload { #[cfg(feature = "json")] JSON(SerdeValue), Reader(Box), + Bytes(Vec), } impl ::std::fmt::Debug for Payload { fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::result::Result<(), ::std::fmt::Error> { - let s = match self { - Payload::Empty => "Empty", - Payload::Text(t, _) => &t, + match self { + Payload::Empty => write!(f, "Empty"), + Payload::Text(t, _) => write!(f, "{}", t), #[cfg(feature = "json")] - Payload::JSON(_) => "JSON", - Payload::Reader(_) => "Reader", - }; - - write!(f, "{}", s) + Payload::JSON(_) => write!(f, "JSON"), + Payload::Reader(_) => write!(f, "Reader"), + Payload::Bytes(v) => write!(f, "{:?}", v), + } } } @@ -91,6 +91,11 @@ impl Payload { SizedReader::new(Some(len), Box::new(cursor)) } Payload::Reader(read) => SizedReader::new(None, read), + Payload::Bytes(bytes) => { + let len = bytes.len(); + let cursor = Cursor::new(bytes); + SizedReader::new(Some(len), Box::new(cursor)) + }, } } } diff --git a/src/request.rs b/src/request.rs index 6f36c63..d51b8ce 100644 --- a/src/request.rs +++ b/src/request.rs @@ -135,6 +135,25 @@ impl Request { self.do_call(Payload::JSON(data)) } + /// Send data as bytes. + /// + /// The `Content-Length` header is implicitly set to the length of the serialized value. + /// + /// ``` + /// #[macro_use] + /// extern crate ureq; + /// + /// fn main() { + /// let body = b"Hello world!"; + /// let r = ureq::post("/my_page") + /// .send_bytes(body); + /// println!("{:?}", r); + /// } + /// ``` + pub fn send_bytes(&mut self, data: &[u8]) -> Response { + self.do_call(Payload::Bytes(data.to_owned())) + } + /// Send data as a string. /// /// The `Content-Length` header is implicitly set to the length of the serialized value.