Это пример ржавой деформации для новичков. Это должно быть очень просто, но сейчас я чувствую себя супер-глупым.
use warp::Filter;
#[tokio::main]
async fn main() {
// GET /hello/warp => 200 OK with body "Hello, warp!"
let hello = warp::path!("hello" / String)
.map(|name| format!("Hello, {}!", name));
warp::serve(hello)
.run(([127, 0, 0, 1], 3030))
.await;
}
Я хотел бы запустить это на корневом пути, определенном следующим образом:
let hello = warp::path!("" /).map(|| "Hello!");
Но макрос не принимает пустой путь. Я получаю сообщение об ошибке:
no rules expected the token `start`
Я думаю, что супер просто означает разные вещи для разных людей.
Приложение:
Итак, я попробовал решение, упомянутое Иваном C (комментарий ниже) из здесь Это тоже не работает. Применение этого решения
let hello = warp::path::end().map(|name| format!("Hello"));
Приводит, в свою очередь, к этому сообщению об ошибке:
[rustc E0599] [E] no method named `map` found for opaque type `impl warp::Filter+std::marker::Copy` in the current scope
method not found in `impl warp::Filter+std::marker::Copy`
note: the method `map` exists but the following trait bounds were not
satisfied: `impl warp::Filter+std::marker::Copy: std::iter::Iterator`
Похоже, что маршрутизация с путями деформации работает только в том случае, если не нужен корневой маршрут, который просто ограничивает показ.