Larp

A helper for warp. Provide some macros to make warp easier.

Warning

Larp is far from stable. BE CAREFUL if want to use it on your product.

Install

```toml [dependencies] warp = "0.1.9" larp = "0.0.1"

optional

serde = "1.0.80" serde_derive = "1.0.80" ```

Example

```rust

[macro_use]

extern crate warp;

[macro_use]

extern crate larp;

use warp::Filter;

fn main() { let route = get!().map(|| "hello, world"); warp::serve(route).run(([0; 4], 3000)) } ```

Now you can see "hello, world" at http://localhost:3000.

API

get!

Create a route only responding to get request.

```rust

[macro_use]

extern crate warp;

[macro_use]

extern crate larp;

use warp::Filter;

fn main() { // handle / and response "hello, world" let hello_world = get!().map(|| "hello, world");

// handle /hello/:name and response "hello, $name" let hello_name = get!("hello" / String) .map(|name| format!("hello, {}", name));

// combine some routes let route = route!(/, helloworld, helloname);

warp::serve(route).run(([0; 4], 3000)) } ```

post!

Create a route only responding to post request. The Content-Type of request must be application/json and it will be parsed automatically.

```rust

[macro_use]

extern crate warp;

[macro_use]

extern crate larp;

// for serializing Person struct, you should import serde and serde_derive

[macro_use]

extern crate serde_derive; extern crate serde;

use warp::Filter;

[derive(Debug, Serialize, Deserialize)]

struct Person { pub name: String, }

fn main() { // handle / and response "hello, world" let hello_world = post!().map(|| "hello, world");

// handle /person // request body must be { name: 'someone' } // response body is { name: 'someone' } too let hello_person = post!("person") .map(|p: Person| warp::reply::json(&p));

// combine some routes let route = route!(/, helloworld, helloperson);

warp::serve(route).run(([0; 4], 3000)) } ```

put!

Create a route only responding to put request. Same as post!.

del!

Create a route only responding to delete request. Same as get!.

route!

Make a subroute and combine some routes.

```rust // ...

fn main() { let hello_world = get!().map(|| "hello, world");

let hello_name = get!("hello" / String) .map(|name| format!("hello, {}", name));

let hellopostworld = post!().map(|| "hello, world");

let hello_person = post!("person") .map(|p: Person| warp::reply::json(&p));

// handle /get and /get/hello let get = route!("get", helloworld, helloname);

// handle /post and /post/person let post = route!("post", hellopostworld, hello_person);

let route = route!(/, get, post); warp::serve(route).run(([0; 4], 3000)) } ```