From 81e0f1ff2af9908757b0dcae28eb49763ab1ab89 Mon Sep 17 00:00:00 2001 From: Bas De Bue Date: Mon, 5 Aug 2019 14:50:42 +0200 Subject: [PATCH] Change Part::stream to reqwest::r#async::Chunk --- src/async_impl/body.rs | 37 ++++++++++++++++++++++++++++++++++--- src/async_impl/multipart.rs | 10 +++++----- tests/async.rs | 4 ++-- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/async_impl/body.rs b/src/async_impl/body.rs index d118e66..e73ac4e 100644 --- a/src/async_impl/body.rs +++ b/src/async_impl/body.rs @@ -165,6 +165,7 @@ impl Chunk { } } } + impl Buf for Chunk { fn bytes(&self) -> &[u8] { self.inner.bytes() @@ -210,10 +211,40 @@ impl IntoIterator for Chunk { } } +impl From> for Chunk { + fn from(v: Vec) -> Chunk { + Chunk { inner: v.into() } + } +} + +impl From<&'static [u8]> for Chunk { + fn from(slice: &'static [u8]) -> Chunk { + Chunk { inner: slice.into() } + } +} + +impl From for Chunk { + fn from(s: String) -> Chunk { + Chunk { inner: s.into() } + } +} + +impl From<&'static str> for Chunk { + fn from(slice: &'static str) -> Chunk { + Chunk { inner: slice.into() } + } +} + +impl From for Chunk { + fn from(bytes: Bytes) -> Chunk { + Chunk { inner: bytes.into() } + } +} + impl From for hyper::Chunk { - fn from(val: Chunk) -> hyper::Chunk { - val.inner - } + fn from(val: Chunk) -> hyper::Chunk { + val.inner + } } impl fmt::Debug for Body { diff --git a/src/async_impl/multipart.rs b/src/async_impl/multipart.rs index 198a016..fece365 100644 --- a/src/async_impl/multipart.rs +++ b/src/async_impl/multipart.rs @@ -9,7 +9,7 @@ use http::HeaderMap; use futures::Stream; -use super::Body; +use super::{Body, Chunk}; /// An async multipart/form-data request. pub struct Form { @@ -185,10 +185,10 @@ impl Part { pub fn stream(value: T) -> Part where T: Stream + Send + 'static, + T::Item: Into, T::Error: std::error::Error + Send + Sync, - hyper::Chunk: std::convert::From, { - Part::new(Body::wrap(hyper::Body::wrap_stream(value))) + Part::new(Body::wrap(hyper::Body::wrap_stream(value.map(|chunk| chunk.into())))) } fn new(value: Body) -> Part { @@ -477,13 +477,13 @@ mod tests { #[test] fn stream_to_end() { let mut form = Form::new() - .part("reader1", Part::stream(futures::stream::once::<_, hyper::Error>(Ok(hyper::Chunk::from("part1".to_owned()))))) + .part("reader1", Part::stream(futures::stream::once::<_, hyper::Error>(Ok(Chunk::from("part1".to_owned()))))) .part("key1", Part::text("value1")) .part( "key2", Part::text("value2").mime(mime::IMAGE_BMP), ) - .part("reader2", Part::stream(futures::stream::once::<_, hyper::Error>(Ok(hyper::Chunk::from("part2".to_owned()))))) + .part("reader2", Part::stream(futures::stream::once::<_, hyper::Error>(Ok(Chunk::from("part2".to_owned()))))) .part( "key3", Part::text("value3").file_name("filename"), diff --git a/tests/async.rs b/tests/async.rs index f98996b..a0e95e1 100644 --- a/tests/async.rs +++ b/tests/async.rs @@ -14,7 +14,7 @@ use std::time::Duration; use futures::{Future, Stream}; use tokio::runtime::current_thread::Runtime; -use reqwest::r#async::Client; +use reqwest::r#async::{Chunk, Client}; use reqwest::r#async::multipart::{Form, Part}; use bytes::Bytes; @@ -105,7 +105,7 @@ fn response_json() { fn multipart() { let _ = env_logger::try_init(); - let stream = futures::stream::once::<_, hyper::Error>(Ok(hyper::Chunk::from("part1 part2".to_owned()))); + let stream = futures::stream::once::<_, hyper::Error>(Ok(Chunk::from("part1 part2".to_owned()))); let part = Part::stream(stream); let form = Form::new()