From bc43372ba4a84837f32e74b5104ee30e32898e73 Mon Sep 17 00:00:00 2001 From: Marat Safin Date: Sun, 19 Aug 2018 10:15:22 +0300 Subject: [PATCH] add multipart for client --- Cargo.toml | 3 +++ src/client/mod.rs | 1 + src/client/request.rs | 13 +++++++++++++ src/lib.rs | 1 + 4 files changed, 18 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index cd13e341c..a318c3c25 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -126,6 +126,9 @@ webpki-roots = { version = "0.15", optional = true } # unix sockets tokio-uds = { version="0.2", optional = true } +#multipart for client +multipart-rfc7578 = "0.6" + [dev-dependencies] env_logger = "0.6" serde_derive = "1.0" diff --git a/src/client/mod.rs b/src/client/mod.rs index 7696efa97..8b75082f0 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -40,6 +40,7 @@ pub(crate) use self::pipeline::Pipeline; pub use self::pipeline::{SendRequest, SendRequestError}; pub use self::request::{ClientRequest, ClientRequestBuilder}; pub use self::response::ClientResponse; +pub use multipart_rfc7578::Form as MultipartForm; pub(crate) use self::writer::HttpClientWriter; use error::ResponseError; diff --git a/src/client/request.rs b/src/client/request.rs index ad08ad135..b1191991f 100644 --- a/src/client/request.rs +++ b/src/client/request.rs @@ -12,6 +12,7 @@ use serde::Serialize; use serde_json; use serde_urlencoded; use url::Url; +use multipart_rfc7578::{Form, Body as MultipartBody}; use super::connector::{ClientConnector, Connection}; use super::pipeline::SendRequest; @@ -709,6 +710,18 @@ impl ClientRequestBuilder { self.body(body) } + /// Set a multipart body and generate `ClientRequest`. + /// + /// `ClientRequestBuilder` can not be used after this call. + pub fn multipart(&mut self, form: Form) -> Result + { + self.header(header::CONTENT_TYPE, form.content_type()); + if let Some(len) = form.content_length() { + self.header(header::CONTENT_LENGTH, len.to_string()); + } + self.streaming(MultipartBody::from(form)) + } + /// Set a streaming body and generate `ClientRequest`. /// /// `ClientRequestBuilder` can not be used after this call. diff --git a/src/lib.rs b/src/lib.rs index 21515051e..6beb631f2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -114,6 +114,7 @@ extern crate net2; extern crate parking_lot; extern crate rand; extern crate slab; +extern crate multipart_rfc7578; extern crate tokio; extern crate tokio_current_thread; extern crate tokio_io;