1个不稳定版本
0.1.0 | 2022年9月10日 |
---|
#63 in #endpoint
16KB
174 行
axum_either
在axum处理程序中接受并响应多种类型之一。
这对于创建接受多种消息格式的端点特别有用。这可以通过直接使用AxumEither
来完成。对于超过两种类型,这可能会变得相当冗长。为此,可以使用one_of
宏来表示类型,并可以使用map_one_of
或match_one_of
宏来以舒适的方式处理这些类型。
请注意,这将从左到右探测所有变体,对于性能而言,可能还是提供多个API端点或匹配内容类型头更好。
示例
use axum::{Json, Form};
use axum_either::AxumEither;
#[derive(serde::Serialize, serde::Deserialize, Debug, PartialEq)]
pub struct Request(u32);
/// Using AxumEither directly
pub async fn form_or_json(
request: AxumEither<Json<Request>, Form<Request>>
) -> AxumEither<Json<Request>, String> {
match request {
AxumEither::Left(Json(l)) => AxumEither::Left(Json(l)),
AxumEither::Right(r) => AxumEither::Right(format!("{:?}", r)),
}
}
/// Using one_of and match_one_of
pub async fn request_type(
request: axum_either::one_of!(Json<Request>, Form<Request>, String)
) -> &'static str {
axum_either::match_one_of!{request,
Json(_j) => "Json",
Form(_f) => "Form",
_s => "String",
}
}
更多示例请参阅示例目录。
许可证
该项目受MIT许可证许可。
贡献
除非你明确表示,否则你提交的任何有意包含的贡献,都应按照MIT许可证授权,不附加任何额外条款或条件。
依赖项
~1.4–2.2MB
~43K SLoC