send_bytes

This commit is contained in:
Martin Algesten
2019-06-21 15:53:45 +02:00
parent 9d069b60b4
commit fef05fd5c9
2 changed files with 32 additions and 8 deletions

View File

@@ -23,19 +23,19 @@ pub(crate) enum Payload {
#[cfg(feature = "json")]
JSON(SerdeValue),
Reader(Box<dyn Read + 'static>),
Bytes(Vec<u8>),
}
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))
},
}
}
}

View File

@@ -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.