3 个不稳定版本
0.2.0 | 2023 年 11 月 23 日 |
---|---|
0.1.1 | 2023 年 11 月 20 日 |
0.1.0 | 2023 年 11 月 20 日 |
#2930 in 解析器实现
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.0 或 MIT 许可证 下许可。除非您明确表示,否则任何有意提交以包含在此软件包中的贡献,根据 Apache-2.0 许可证定义,应按上述方式双许可,不附加任何额外条款或条件。
依赖项
~6–8.5MB
~155K SLoC