I have a warp POST route where I'd like to return JSON in the response body and a 201 CREATED status.
I can return the JSON with a 200 status using Ok(warp::reply::json(&dog))
.
I can return a plain string and a 201 status using Ok(warp::reply::with_status("success", StatusCode::CREATED))
.
But I can't figured out how to do both.
with_status
can take any kind of reply, not just a string. For example:
Ok(with_status(json(&dog), StatusCode::CREATED))
I think I left an important detail out of my question. The return type of the function this is inside is Result<Json, Rejection>
, so it wants the value given to Ok
to be a Json
. Using your suggestion gives the error "expected struct warp::reply::Json
, found struct warp::reply:WithStatus
" which makes sense.
I think I need to change the return type of the function, but it's not clear to me what it should be.
I posted another PR with a couple options for return types: https://github.com/mvolkmann/rust-warp-demo/pull/2
The return value of warp::reply::with_status
is WithStatus<T>
where T
is whatever you put inside it, so in your case it would be
Result<WithStatus<Json<...>>, Rejection>
This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.