4个版本
0.0.4 | 2020年12月1日 |
---|---|
0.0.3 | 2020年11月29日 |
0.0.2 | 2020年11月29日 |
0.0.1 | 2020年11月27日 |
#1045 in 过程宏
12KB
200 行
actix-responder-macro
一个属性宏,可以将处理器响应结构体转换为 actix responder
。在添加更多类型安全的同时保持灵活性。
actix_responder
为您的结构体添加了两个额外字段 content_type
和 status_code
。 meta_attr
允许对这两个字段使用任意属性。
status_attr
仅应用于 status_code
,而 content_attr
仅应用于 content_type
原因如下,例如,如果您使用 TypedBuilder
这样的crate,您可能想将选项如 #[builder(default)]
应用到生成的字段。
宏始终将 #[serde(skip)]
应用到生成的字段,这样它们就不会出现在请求响应中。
#[actix_responder(meta_attr = "builder(default)")]
#[derive(TypedBuilder, Serialize, Deserialize)]
pub struct SuccessResp {
success: bool,
}
从这
#[get("/health_check")]
pub async fn health_check() -> impl Responder {
HttpResponse::Ok()
.set_header(header::CONTENT_TYPE, mime::APPLICATION_JSON)
.json(SuccessResp { success: true })
}
到这
#[get("/health_check")]
pub async fn health_check() -> SuccessResp {
SuccessResp::builder()
.success(true)
.content_type(mime::APPLICATION_JSON::to_string())
.build()
}
一个更复杂的示例,设置默认值
extern crate actix_responder_macro;
extern crate mime;
extern crate typed_builder;
use actix_responder_macro::actix_responder;
use actix_web::http::StatusCode;
use serde::{Deserialize, Serialize};
use typed_builder::TypedBuilder;
#[actix_responder(
status_attr = "builder(default = StatusCode::INTERNAL_SERVER_ERROR)",
content_attr = "builder(default = mime::IMAGE_BMP.to_string())"
)]
#[derive(Serialize, Deserialize, Debug, TypedBuilder, Default)]
pub struct ImageResp {...}
依赖项
~1.5MB
~36K SLoC