0

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

    }
Chris
  • 570
  • 2
  • 9
  • 19

0 Answers0