15 releases (8 breaking)
Uses old Rust 2015
0.8.0 | Nov 21, 2017 |
---|---|
0.7.0 | Apr 21, 2017 |
0.6.0 | Feb 3, 2017 |
0.4.1 | Aug 10, 2016 |
0.0.1 | Dec 8, 2014 |
#564 in HTTP server
3,888 downloads per month
Used in 43 crates
(15 directly)
12KB
177 lines
body-parser
Body parsing plugins for the Iron web framework.
Example
extern crate iron;
extern crate bodyparser;
extern crate persistent;
#[macro_use]
extern crate serde_derive;
use persistent::Read;
use iron::status;
use iron::prelude::*;
#[derive(Debug, Clone, Deserialize)]
struct MyStructure {
a: String,
b: Option<String>,
}
fn log_body(req: &mut Request) -> IronResult<Response> {
let body = req.get::<bodyparser::Raw>();
match body {
Ok(Some(body)) => println!("Read body:\n{}", body),
Ok(None) => println!("No body"),
Err(err) => println!("Error: {:?}", err)
}
let json_body = req.get::<bodyparser::Json>();
match json_body {
Ok(Some(json_body)) => println!("Parsed body:\n{:?}", json_body),
Ok(None) => println!("No body"),
Err(err) => println!("Error: {:?}", err)
}
let struct_body = req.get::<bodyparser::Struct<MyStructure>>();
match struct_body {
Ok(Some(struct_body)) => println!("Parsed body:\n{:?}", struct_body),
Ok(None) => println!("No body"),
Err(err) => println!("Error: {:?}", err)
}
Ok(Response::with(status::Ok))
}
const MAX_BODY_LENGTH: usize = 1024 * 1024 * 10;
// While the example is running, try the following curl commands and see how they are
// logged by the Rust server process:
//
// `curl -i "localhost:3000/" -H "application/json" -d '{"name":"jason","age":"2"}'`
// `curl -i "localhost:3000/" -H "application/json" -d '{"a":"jason","b":"2"}'`
// `curl -i "localhost:3000/" -H "application/json" -d '{"a":"jason"}'`
fn main() {
let mut chain = Chain::new(log_body);
chain.link_before(Read::<bodyparser::MaxBodyLength>::one(MAX_BODY_LENGTH));
Iron::new(chain).http("localhost:3000").unwrap();
}
Overview
body-parser is a part of Iron's core bundle. It contains:
- Raw - performs body parsing to string with limiting.
- Json - parses body into Json.
- Struct - parses body into a struct using Serde.
Installation
If you're using a Cargo.toml
to manage dependencies, just add body-parser to the toml:
[dependencies.bodyparser]
git = "https://github.com/iron/body-parser.git"
Otherwise, cargo build
, and the rlib will be in your target
directory.
Documentation
Along with the online documentation,
you can build a local copy with make doc
.
Examples
Get Help
One of us (@reem, @zzmp,
@theptrk, @mcreinhard)
is usually on #iron
on the mozilla irc. Come say hi and ask any questions you might have.
We are also usually on #rust
and #rust-webdev
.
Dependencies
~6MB
~130K SLoC