如何有条件地将路由添加到 Axum Router?

Fre*_*ors 2 rust rust-axum

我正在使用axum此代码来创建服务器,但出现错误:

use axum::{response::Html, routing::get, Router};

async fn handler() -> Html<&'static str> {
    Html("<h1>Hello, World!</h1>")
}

#[tokio::main]
async fn main() {
    let router = Router::new();

    router.route("/", get(handler));

    if true { // I need to check something here
        router.route("/other", get(handler));
    }

    axum::Server::bind(&([127, 0, 0, 1], 3000).into())
        .serve(router.into_make_service())
        .await
        .unwrap();
}
Run Code Online (Sandbox Code Playgroud)
error[E0382]: use of moved value: `router`
  --> src\main.rs:18:16
   |
9  |     let router = Router::new();
   |         ------ move occurs because `router` has type `Router`, which does not implement the `Copy` trait
10 |
11 |     router.route("/", get(handler));
   |     ------ value moved here
...
14 |         router.route("/other", get(handler));
   |         ------ value moved here
...
18 |         .serve(router.into_make_service())
   |                ^^^^^^ value used here after move
Run Code Online (Sandbox Code Playgroud)

我尝试过,&router但仍然收到错误。我怎样才能解决这个问题?我应该使用吗.clone()

Fre*_*ors 5

使用此代码可以正常工作:

let mut router = Router::new();
router = router.route("/", get(handler));

if true {
    router = router.route(...);
}
Run Code Online (Sandbox Code Playgroud)