I have a handler like the code below. Invalid query is handled by the custom rejection. It works. However if i want to use a predefined warp::reject::InvalidQuery
i am getting all kinds of errors. For example [E0423] expected value, found struct warp::reject::InvalidQuery.
,
Every once in a while, when I already think I start to get things, Rust proves me I am far from that... How to correctly use the predefined warp rejections in cases like this?
#[derive(Debug)]
struct InvalidParam;
impl reject::Reject for InvalidParam{}
pub async fn list_todos_handler(query: SearchQuery, db_pool: DBPool) -> HandlerResult<impl Reply> {
if let Some(id_value) = &query.id {
println!("query.id has a value: {}", id_value);
let todos = db::fetch_todo_by_id(&db_pool, query.id)
.await
.map_err(|e| reject::custom(e))?;
Ok(json::<Vec<_>>(&todos.into_iter().map(|t| TodoResponse::of(t)).collect(),))
} else if let Some(name_value)= &query.name {
println!("query.name has a value: {}", name_value);
let todos = db::fetch_todos(&db_pool, query.name)
.await
.map_err(|e| reject::custom(e))?;
Ok(json::<Vec<_>>(&todos.into_iter().map(|t| TodoResponse::of(t)).collect(),))
} else {
Err(reject::custom(InvalidParam)) // this works but its not what i want. how to return InvalidQuery??
// Err(reject::custom(warp::reject::InvalidQuery)) // <-E0423
//Err(warp::reject::invalid_query) // <- E0308
//Err(warp::reject::InvalidQuery) // also no-no
}