3 个版本 (破坏性更新)
0.4.0 | 2024 年 1 月 2 日 |
---|---|
0.3.0 | 2022 年 12 月 1 日 |
0.2.0 | 2022 年 5 月 25 日 |
在 解析器实现 中排名第 737
每月下载量 1,306
在 3 crates 中使用
25KB
493 行
axum-yaml
axum-yaml
为 axum 添加 YAML 功能
功能
- 序列化和反序列化请求/响应中的 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