Ракета не анализирует RawStr в URL для соответствия маршруту

Руководство на сайте Rocket предполагает, что динамические маршруты могут быть ранжированы. В примере используются разные типы динамической части в качестве критерия соответствия для маршрутов. Когда я ставлю URL с чем-либо, кроме usizeЯ получаю следующую ошибку:

GET /user/three text/html:
    => Matched: GET /user/<id>
    => Failed to parse 'id': RawStr("three")
    => Outcome: Forward
    => Error: No matching routes for GET /user/three text/html.
    => Warning: Responding with 404 Not Found catcher.
    => Response succeeded.

Код, который я использую:

#![feature(plugin)]
#![plugin(rocket_codegen)]

extern crate rocket;
use rocket::http::RawStr;

#[get("/user/<id>")]
fn user(id: usize) -> String { format!("First rank") }

#[get("/user/<id>", rank = 2)]
fn user_int(id: isize) -> String { format!("second rank") }

#[get("/user/<id>", rank = 3)]
fn user_str(id: &RawStr) -> String { format!("last rank") }

fn main() {
    rocket::ignite().mount("/", routes![user]).launch();
}

Я ожидал бы вместо 404 error страница в /user/three отображение теста last rank, Почему он этого не делает?

1 ответ

Решение

Rocket не знает о ваших маршрутах, если вы не расскажете о них:

fn main() {
    rocket::ignite().mount("/", routes![user, user_int, user_str]).launch();
    //                                      ^^^^^^^^^^^^^^^^^^^^
}
Другие вопросы по тегам