#![feature(plugin)] #![plugin(rocket_codegen)] extern crate rocket; use rocket::http::uri::Segments; #[get("/test/")] fn test(path: Segments) -> String { path.collect::>().join("/") } #[get("/two/")] fn two(path: Segments) -> String { path.collect::>().join("/") } #[get("/one/two/")] fn one_two(path: Segments) -> String { path.collect::>().join("/") } #[get("/", rank = 2)] fn none(path: Segments) -> String { path.collect::>().join("/") } #[get("/static//is/")] fn dual(user: String, path: Segments) -> String { user + "/is/" + &path.collect::>().join("/") } #[cfg(feature = "testing")] mod tests { use super::*; use rocket::testing::MockRequest; use rocket::http::Method::*; #[test] fn segments_works() { let rocket = rocket::ignite() .mount("/", routes![test, two, one_two, none, dual]) .mount("/point", routes![test, two, one_two, dual]); // We construct a path that matches each of the routes above. We ensure the // prefix is stripped, confirming that dynamic segments are working. for prefix in &["", "/test", "/two", "/one/two", "/point/test", "/point/two", "/point/one/two", "/static", "/point/static"] { let path = "this/is/the/path/we/want"; let mut req = MockRequest::new(Get, format!("{}/{}", prefix, path)); let mut response = req.dispatch_with(&rocket); assert_eq!(response.body_string(), Some(path.into())); } } }