У меня есть маршрут и определена функция конечной точки. Я также ввел некоторые зависимости.
pub fn route1() -> BoxedFilter<(String, ParamType)> {
warp::get()
.and(warp::path::param())
.and(warp::filters::query::query())
.and(warp::path::end())
.boxed()
}
pub async fn handler1(
query: String,
param: ParamType,
dependency: DependencyType,
) -> Result<impl warp::Reply, warp::Rejection> {
}
let api = api::routes::route1()
.and(warp::any().map(move || dependency))
.and_then(api::hanlders::hander1);
Кажется, все работает нормально.
Однако я хочу иметь возможность иметь что-то, что находится перед несколькими конечными точками который проверяет действительный ключ в параметре запроса. Внутри handler1
я могу добавить:
if !param.key_valid {
return Ok(warp::reply::with_status(
warp::reply::json(&""),
StatusCode::BAD_REQUEST,
));
}
Я не хочу добавлять это к каждому обработчику индивидуально.
Кажется, я должен быть в состоянии сделать это через filter
, но я не могу понять это. Я попытался использовать .map()
, но затем, возвращая несколько элементов, сдвигает его в кортеж, и мне приходится менять сигнатуру функции нижестоящего элемента. В идеале я хочу найти способ добавить проверки или другие фильтры, которые могут отклонить запрос без каких-либо нижестоящих значений о них.