multipart 0.15.4

A backend-agnostic extension for HTTP libraries that provides support for POST multipart/form-data requests on both client and server.
Documentation
# Multipart [![Build Status]https://travis-ci.org/abonander/multipart.svg?branch=master]https://travis-ci.org/abonander/multipart [![On Crates.io]https://img.shields.io/crates/v/multipart.svg]https://crates.io/crates/multipart


Client- and server-side abstractions for HTTP file uploads (POST requests with  `Content-Type: multipart/form-data`).

Supports several different (**sync**hronous API) HTTP crates. 
**Async**hronous (i.e. `futures`-based) API support will be provided by [multipart-async].

Minimum supported Rust version: 1.22.1*
* only `mock`, `client` and `server` features, only guaranteed to compile

Fully tested Rust version: 1.26.1

### [Documentation]http://docs.rs/multipart/


## Integrations


Example files demonstrating how to use `multipart` with these crates are available under [`examples/`](examples).

### [Hyper ![]https://img.shields.io/crates/v/hyper.svg]https://crates.io/crates/hyper 

via the `hyper` feature (enabled by default). 

**Note: Hyper 0.9, 0.10 (synchronous API) only**; support for asynchronous APIs will be provided by [multipart-async].
 
Client integration includes support for regular `hyper::client::Request` objects via `multipart::client::Multipart`, as well
as integration with the new `hyper::Client` API via `multipart::client::lazy::Multipart` (new in 0.5).

Server integration for `hyper::server::Request` via `multipart::server::Multipart`.

### [Iron ![]https://img.shields.io/crates/v/iron.svg]https://crates.io/crates/iron 

via the `iron` feature.

Provides regular server-side integration with `iron::Request` via `multipart::server::Multipart`, 
as well as a convenient `BeforeMiddleware` implementation in `multipart::server::iron::Intercept`.

### [Nickel ![]https://img.shields.io/crates/v/nickel.svg]https://crates.io/crates/nickel <sup>returning to `multipart` in 0.14!</sup>

via the `nickel` feature.

Provides server-side integration with `&mut nickel::Request` via `multipart::server::Multipart`. 

### [tiny_http ![]https://img.shields.io/crates/v/tiny_http.svg]https://crates.io/crates/tiny_http

via the `tiny_http` feature.

Provides server-side integration with `tiny_http::Request` via `multipart::server::Multipart`.

### [Rocket ![]https://img.shields.io/crates/v/rocket.svg]https://crates.io/crates/rocket


Direct integration is not provided as the Rocket folks seem to want to handle `multipart/form-data`
behind the scenes which would supercede any integration with `multipart`. However, an example is available
showing how to use `multipart` on a Rocket server: [examples/rocket.rs](examples/rocket.rs)

## ⚡ Powered By ⚡


### [buf_redux ![]https://img.shields.io/crates/v/buf_redux.svg]https://crates.io/crates/buf_redux


Customizable drop-in `std::io::BufReader` replacement, created to be used in this crate.
Needed because it can read more bytes into the buffer without the buffer being empty, necessary
when a boundary falls across two reads. (It was easier to author a new crate than try to get this added
to `std::io::BufReader`.)

### [httparse ![]https://img.shields.io/crates/v/httparse.svg]https://crates.io/crates/httparse


Fast, zero-copy HTTP header parsing, used to read field headers in `multipart/form-data` request bodies.

### [twoway ![]https://img.shields.io/crates/v/twoway.svg]https://crates.io/crates/twoway


Fast string and byte-string search. Used to find boundaries in the request body. SSE 4.2 acceleration available
under the `sse42` or `twoway/pcmp` features.

## License


Licensed under either of

 * Apache License, Version 2.0, ([LICENSE-APACHE]LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
 * MIT license ([LICENSE-MIT]LICENSE-MIT or http://opensource.org/licenses/MIT)

at your option.

## Contribution


Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.

[multipart-async]: https://github.com/abonander/multipart-async