3 个版本 (破坏性更新)

0.4.0 2024 年 1 月 2 日
0.3.0 2022 年 12 月 1 日
0.2.0 2022 年 5 月 25 日

解析器实现 中排名第 737

Download history 235/week @ 2024-04-08 269/week @ 2024-04-15 355/week @ 2024-04-22 261/week @ 2024-04-29 263/week @ 2024-05-06 422/week @ 2024-05-13 415/week @ 2024-05-20 266/week @ 2024-05-27 313/week @ 2024-06-03 493/week @ 2024-06-10 263/week @ 2024-06-17 275/week @ 2024-06-24 367/week @ 2024-07-01 309/week @ 2024-07-08 216/week @ 2024-07-15 410/week @ 2024-07-22

每月下载量 1,306
3 crates 中使用

MIT 许可证

25KB
493

axum-yaml

axum-yaml 为 axum 添加 YAML 功能

Documentation Crates.io

功能

  • 序列化和反序列化请求/响应中的 YAML

使用示例

提取器示例

当用作提取器时,它可以反序列化请求体为实现了 serde::Deserialize 的某些类型。如果请求体无法解析,或者它不包含 Content-Type: application/yaml 头部,它将拒绝请求并返回 400 Bad Request 响应。

use axum::{
    extract,
    routing::post,
    Router,
};
use axum_yaml::Yaml;
use serde::Deserialize;

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

async fn create_user(Yaml(payload): Yaml<CreateUser>) {
    // payload is a `CreateUser`
}

let app = Router::new().route("/users", post(create_user));

[!NOTE] 此外,您还可以从字节数组(Yaml::from_bytes())构造 Yaml<T>。大多数用户应首选使用 FromRequest 实现,但特殊情况可能需要首先将 Request 提取为 Bytes,然后可选地构造一个 Yaml<T>

响应示例

当用作响应时,它可以序列化实现了 serde::Serialize 的任何类型到 YAML,并将自动设置 Content-Type: application/yaml 头部。

use axum::{
    extract::Path,
    routing::get,
    Router,
};

use axum_yaml::Yaml;
use serde::Serialize;
use uuid::Uuid;

#[derive(Serialize)]
struct User {
    id: Uuid,
    username: String,
}

async fn get_user(Path(user_id) : Path<Uuid>) -> Yaml<User> {
    let user = find_user(user_id).await;
    Yaml(user)
}

async fn find_user(user_id: Uuid) -> User {
    // ...
}

let app = Router::new().route("/users/:id", get(get_user));

许可证

此项目受 MIT 许可证的许可

依赖项

~4.5MB
~89K SLoC