首页 > 解决方案 > 如何在 actix 处理程序中设置查询参数的默认选项?

问题描述

我想为 actix 中的查询值设置默认值。

我知道DefaultRust 标准库中的结构有一个 Trait,但老实说,我不知道如何在这种情况下应用它。

在我的情况下,请求查询可能会也可能不会提供分页值页面和page_size.

这是我想做的事情:

src/adapters.rs(我的处理程序模块)

pub mod Basic {
    #[derive(Deserialize, Default)]
    pub struct ListQuery {
        page: i64,
        per_page: i64,
    }

    pub async fn articles_list(listQuery: Query<ListQuery>) -> impl Responder {
        let query_options = ListQuery;
        // should default to { page: 1, per_page: 10 }
        // ...
    }
}

那么,如果没有给出查询参数,我怎么能得到例如per_page值为 10 的值?

标签: rustactix-web

解决方案


宏通过调用所有元素[derive(Default)]派生默认实现。::default对于 i64,这会导致 0。您真正想要做的是Default自己实现:

#[derive(Deserialize)]
pub struct ListQuery {
  page: i64,
  per_page: i64,
}
impl Default for ListQuery {
  fn default() -> Self {
    ListQuery {
      page: 1,
      per_page: 10
    }
  }
}

这现在应该为您提供所需的默认值。


推荐阅读