首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有条件地向Axum路由器添加路由?

如何有条件地向Axum路由器添加路由?
EN

Stack Overflow用户
提问于 2022-05-07 21:57:28
回答 2查看 420关注 0票数 1

我使用axum和这段代码来创建一个服务器,但是我得到了一个错误:

代码语言:javascript
复制
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();
}
代码语言:javascript
复制
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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-07 22:21:49

下面是简化的代码(Axum做了同样的事情)。route获得所有权,但也返回它。

代码语言:javascript
复制
#[derive(Debug)]
struct Router {
    list: Vec<String>,
}

impl Router {
    fn new() -> Self {
        Router { list: vec![] }
    }

    fn route(mut self, path: String) -> Self {
        self.list.push(path);
        self
    }
}

fn main() {
    let mut router = Router::new().route("/1".to_owned()).route("/2".to_owned());

    if true {
        router = router.route("/3".to_owned());
    }

    println!("{:?}", router);
}

因此,您必须将router设置为内联,或者使其成为mut,并将route的结果重新分配给router变量。

票数 1
EN

Stack Overflow用户

发布于 2022-05-07 22:18:35

使用此代码,它可以工作:

代码语言:javascript
复制
let mut router = Router::new();
router = router.route("/", get(handler));

if true {
    router = router.route(...);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72156620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档