如何使用Rust关键字作为查询动态参数创建端点?

时间:2019-01-05 19:16:47

标签: rust rust-rocket

我使用了Rocket库,我需要创建一个包含动态参数“ type”和关键字的端点。

我尝试过类似的操作,但无法编译:

#[get("/offers?<type>")]
pub fn offers_get(type: String) -> Status {
    unimplemented!()
}

编译器错误:

error: expected argument name, found keyword `type`

在火箭中是否可以有一个名为“ type”的参数?由于遵循的规范,我无法重命名参数。

1 个答案:

答案 0 :(得分:7)

对与保留关键字相同的查询参数进行命名存在已知限制。在主题Field Renaming的文档中突出显示了此内容。它确实提到了如何使用一些额外的代码来解决您的问题。您的用例示例:

use rocket::request::Form;

#[derive(FromForm)]
struct External {
    #[form(field = "type")]
    api_type: String
}

#[get("/offers?<ext..>")]
fn offers_get(ext: Form<External>) -> String {
    format!("type: '{}'", ext.api_type)
}

对于/offers?type=Hello,%20World!的GET请求,它应返回type: 'Hello, World!'