2 个不稳定版本

0.2.0 2023年12月14日
0.1.0 2023年9月23日

#2964解析器实现

每月 <28 下载

MIT 许可证

16KB
225 代码行

axum-xml-up

crates.io Documentation

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