2 个不稳定版本
0.2.0 | 2023年12月14日 |
---|---|
0.1.0 | 2023年9月23日 |
#2964 在 解析器实现
每月 <28 下载
16KB
225 代码行
axum-xml-up
https://github.com/PhotonQuantum/axum-xml 的分支,更新到 axum 0.7 版本,用于 axum 0.6 版本请使用此库的 v0.1 版本
axum 的 XML 提取器。
此crate提供 Xml
结构体,可用于从请求体中提取类型化信息。
使用 quick-xml 进行反序列化和序列化负载
[dependencies]
axum-xml-up = "0.2"
功能
encoding
: 支持 non utf-8 负载
请求示例
用作提取器时,可以将 XML 内容反序列化到实现 serde::Deserialize
的类型中。如果请求体无法解析,或者它不包含 Content-Type: application/xml
头部,它将拒绝请求并返回 400 错误请求
响应。
use axum::{
extract,
routing::post,
Router,
};
use serde::Deserialize;
use axum_xml_up::Xml;
#[derive(Deserialize)]
struct CreateUser {
email: String,
password: String,
}
async fn create_user(Xml(payload): Xml<CreateUser>) {
// payload is a `CreateUser`
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/users", post(create_user));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
响应示例
用作响应时,可以将实现 serde::Serialize
的任何类型序列化为 XML
,并将自动设置 Content-Type: application/xml
头部。
use axum::{
extract,
routing::get,
Router,
};
use serde::Deserialize;
use axum_xml_up::Xml;
#[derive(Deserialize)]
struct User {
id: u32,
username: String,
}
async fn get_user(Path(user_id) : Path<u32>) -> Xml<User> {
let user = find_user(user_id).await;
Xml(user)
}
async fn find_user(user_id: u32) -> User {
unimplemented!();
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/users", get(get_user));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, app).await.unwrap();
}
许可证
MIT
依赖项
~3–4.5MB
~91K SLoC