0

I have 2 routes in Iron:

  1. /something/:some_int # integer
  2. /something2/:some_str # string

How can I get these :some_{int, str} parts of them?

fn my_something_int_route_handler(req: &mut Request) -> IronResult<Response> {
    let ref query = req.extensions.get::<Router>().unwrap().find("query").unwrap_or("/");

    //what next ???
    // how can I get the ":some_int" from :/something/:some_int
fn my_something2_str_route_handler(req: &mut Request) -> IronResult<Response> {
    let ref query = req.extensions.get::<Router>().unwrap().find("query").unwrap_or("/");

    // how can I get the ":some_str" from :/something/:some_str
Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366
Joharu
  • 1
  • 2

1 Answers1

0

Use the router crate:

let mut router = Router::new();
router.get("/users/:user_id", user_show, "user_show");
let _server = Iron::new(router).http(("127.0.0.1", 8787)).unwrap();

Inside your handler, you get a reference to the Router's Params which lets you get the value for each named parameter. Note that the argument to Params::find matches the names assigned when the route was defined:

fn user_show(req: &mut Request) -> IronResult<Response> {
    let router = req.extensions.get::<Router>()
        .expect("Unable to get router");
    user_id = router.find("user_id")
        .expect("A user id is required");
}

One you have a parameter as string, you parse it into a number like anywhere else in Rust.

Shepmaster
  • 388,571
  • 95
  • 1,107
  • 1,366