Как создать конечную точку с ключевым словом Rust в качестве динамического параметра запроса?
Я использую библиотеку Rocket, и мне нужно создать конечную точку, которая содержит динамический параметр "тип", ключевое слово.
Я пробовал что-то вроде этого, но он не компилируется:
#[get("/offers?<type>")]
pub fn offers_get(type: String) -> Status {
unimplemented!()
}
ошибка компилятора:
error: expected argument name, found keyword `type`
Можно ли иметь параметр с именем "тип" в ракете? Я не могу переименовать параметр из-за спецификации, которой я следую.
1 ответ
Решение
Существует известное ограничение для именования параметров запроса, таких же как зарезервированные ключевые слова. Это выделено в документации по теме переименования полей. В нем упоминается, как решить вашу проблему с помощью небольшого количества дополнительного кода. Пример для вашего варианта использования:
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)
}
Для получения запроса GET /offers?type=Hello,%20World!
должно вернуться type: 'Hello, World!'