aero 0.1.3

A progressive, idiomatic, and minimalist framework for building Rust HTTP services
Documentation
## Aero

:rocket: A progressive, idiomatic, and minimalist framework for building Rust HTTP services.

wip...

- [x] clean code
- [x] response json
- [x] route
- [ ] body parser
- [ ] file orgnanize
- [ ] api orgnanize
- [ ] publish
- [ ] test

### Install

### Dev

```
cargo fmt -- */**.rs
cargo run
```

### Usage

```Rust
fn main() {
    println!("Hello, world!");
    let mut app = Aero::new("127.0.0.1:3000");

    let mut router = Router::new("/api");
    router.get("/book", |ctx: &mut Context, next: Next| {
        println!("hold hello - {:?}", ctx.req.path);
        // ctx.setBody("It is book api");
        ctx.send_json(Book {
            id: 123,
            name: "asd".to_string(),
            price: 123.3,
        });
        next(ctx);
    });
    app.mount(router);

    app.hold("/hello", |ctx: &mut Context, next: Next| {
        println!("hold hello - {:?}", ctx.req.path);
        ctx.send_text("xxxxxxxxx");
        next(ctx);
    });

    app.get("/hello", |ctx: &mut Context, next: Next| {
        println!("get hello - {:?}", ctx.req.path);
        ctx.body = "hello world".to_string();
        next(ctx);
    });

    app.get("/hello2", |ctx: &mut Context, next: Next| {
        ctx.send_text("hello world 2");
        next(ctx);
    });

    println!("Listening on http://{}", app.socket_addr);

    tokio::runtime::Builder::new_multi_thread()
        // .worker_threads(6)
        .enable_all()
        .build()
        .unwrap()
        .block_on(app.run());
}

#[derive(Serialize, Deserialize)]
pub struct Book {
    id: i32,
    name: String,
    price: f32,
}
```

### benckmark

```
Cooper@CooperdeMBP Rust % autocannon http://127.0.0.1:3000/api/shipping/orders
Running 10s test @ http://127.0.0.1:3000/api/shipping/orders
10 connections


┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬──────┐
│ Stat    │ 2.5% │ 50%  │ 97.5% │ 99%  │ Avg     │ Stdev   │ Max  │
├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼──────┤
│ Latency │ 0 ms │ 0 ms │ 0 ms  │ 0 ms │ 0.01 ms │ 0.04 ms │ 8 ms │
└─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴──────┘
┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
│ Stat      │ 1%      │ 2.5%    │ 50%     │ 97.5%   │ Avg     │ Stdev   │ Min     │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Req/Sec   │ 46431   │ 46431   │ 52799   │ 53887   │ 52400   │ 2055.79 │ 46410   │
├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
│ Bytes/Sec │ 15.2 MB │ 15.2 MB │ 17.3 MB │ 17.6 MB │ 17.1 MB │ 674 kB  │ 15.2 MB │
└───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘

Req/Bytes counts sampled once per second.
# of samples: 10

524k requests in 10.01s, 171 MB read
```