#axum #utility #web #endpoint

axum_either

在axum中接受或响应多种类型之一

1个不稳定版本

0.1.0 2022年9月10日

#63 in #endpoint

MIT许可证

16KB
174

axum_either

在axum处理程序中接受并响应多种类型之一。

这对于创建接受多种消息格式的端点特别有用。这可以通过直接使用AxumEither来完成。对于超过两种类型,这可能会变得相当冗长。为此,可以使用one_of宏来表示类型,并可以使用map_one_ofmatch_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