Middleware-Oriented, Concurrency Focused Web Development in Rust.
struct ResponseTime;
impl Assoc<u64> for ResponseTime {}
impl BeforeMiddleware for ResponseTime {
fn before(&self, req: &mut Request) -> IronResult<()> {
req.extensions.insert::<ResponseTime, u64>(precise_time_ns());
Ok(())
}
}
impl AfterMiddleware for ResponseTime {
fn after(&self, req: &mut Request, _: &mut Response) -> IronResult<()> {
let delta = precise_time_ns() - *req.extensions.find::<ResponseTime, u64>().unwrap();
println!("Request took: {} ms", (delta as f64) / 1000000.0);
Ok(())
}
}
Iron is a high level web framework built in and for Rust
Iron does not come bundled with any middleware - instead, Iron is a robust and efficient framework for plugging in middleware.
Iron focuses on providing a clean API for creating middleware and integrating them in Iron servers.
Iron averages 84,000+ requests per second for hello world.
Iron aims to fill a void in the Rust web stack - a high level framework that is extensible and makes organizing complex server code easy.
Middleware is painless to build, and the core bundle already includes:
- Routing
- Mounting
- Static File Serving
- JSON Body Parsing
- URL Encoded Data Parsing
- Logging
- Cookies
- Sessions
- Persistent Storage
This allows for insanely flexible and powerful setups and allows nearly all
of Iron’s features to be swappable - you can even change the middleware
resolution algorithm by swapping in your own Chain
.
If you're using Cargo
, just add Iron to your Cargo.toml
:
[dependencies.iron]
git = "https://github.com/iron/iron.git"
Otherwise, just clone this repo, cargo build
, and the rlib will be in your target
directory.
Along with the online documentation,
you can build a local copy with cargo doc
.
Check out the examples directory!
You can compile all of the examples with cargo test
. The binaries will be placed in target/test/
.
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
.