3 个不稳定版本

0.2.0 2023 年 11 月 23 日
0.1.1 2023 年 11 月 20 日
0.1.0 2023 年 11 月 20 日

#2930 in 解析器实现

MIT/Apache

18KB
239

axum-media

这个库提供了一种在 axum 生态系统中使用多种 mime 类型进行结构体序列化和反序列化的方式。灵感来自 axum 的 Json 提取器。

[dependencies]
# Enable features such as urlencoded
axum-media = { version = "0.2.0", features = ["urlencoded"]}

示例

use axum_media::{AnyMedia, ContentType};

#[tokio::main]
async fn main() {
  let app = axum::Router::new()
    .route("/", get(index))
    .route("/login", post(login))
}

async fn index(content_type: ContentType) -> impl IntoResponse {
  // Chooses the right serializer based on the Accept header
  AnyMedia(
    serde_json::json!({
      "routes": ["/", "/login"],
    }),
    content_type,
  )
}

#[derive(Deserialize)]
struct LoginData {
  email: String
  password: String
}

// Automatically chooses the right deserializer based on the Content-Type header
async fn login(AnyMedia(data, _): AnyMedia<LoginData>) -> String {
  data.email
}

许可证

根据您的选择,在 Apache License, Version 2.0MIT 许可证 下许可。
除非您明确表示,否则任何有意提交以包含在此软件包中的贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,不附加任何额外条款或条件。

依赖项

~6–8.5MB
~155K SLoC