1个不稳定版本
0.1.0 | 2023年4月21日 |
---|
#864 in 过程宏
5KB
as_warp_reply
用于在自定义结构体上实现warp::reply::Reply
特质的宏。这使您可以将自定义结构体用作请求的响应。例如,您可以进行如下操作
#[derive(serde::Serialize, as_warp_reply::JsonReply)]
struct MyCustomResponse {}
pub fn handler() -> impl Filter<Extract = (impl warp::Reply,), Error = Infallible> + Clone {
warp::any().map(|| MyCustomResponse {})
}
它是如何工作的?
该宏生成使用serde序列化结构体的代码。上面的示例中展开的宏将如下所示
impl warp::reply::Reply for MyCustomResponse {
fn into_response(self) -> warp::reply::Response {
match serde_json::to_string(&self) {
Ok(v) => warp::reply::with_status(v, warp::http::StatusCode::OK).into_response(),
Err(err) => {
log::error!("could not serialize response: {}", err);
warp::reply::with_status("Internal server error", warp::http::StatusCode::INTERNAL_SERVER_ERROR)
.into_response()
}
}
}
}
如您所见,在成功的情况下,响应由序列化的结构体和发送状态码OK组成。在发生任何序列化错误的情况下,响应由“内部服务器错误”消息和发送状态码INTERNAL_SERVER_ERROR组成。此外,还使用log
crate记录序列化错误。
许可证
依赖项
~8–19MB
~249K SLoC