#reply #warp #macro #traits-structs

as_warp_reply

用于在自定义结构体上实现warp reply特质的宏

1个不稳定版本

0.1.0 2023年4月21日

#864 in 过程宏

MIT许可证

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记录序列化错误。

许可证

MIT

依赖项

~8–19MB
~249K SLoC