4 releases (breaking)

0.5.0 Jan 5, 2025
0.4.0 Jan 2, 2024
0.3.0 Dec 1, 2022
0.2.0 May 25, 2022

#1353 in Parser implementations

Download history 299/week @ 2025-06-01 336/week @ 2025-06-08 984/week @ 2025-06-15 300/week @ 2025-06-22 287/week @ 2025-06-29 361/week @ 2025-07-06 438/week @ 2025-07-13 307/week @ 2025-07-20 313/week @ 2025-07-27 518/week @ 2025-08-03 254/week @ 2025-08-10 315/week @ 2025-08-17 185/week @ 2025-08-24 248/week @ 2025-08-31 257/week @ 2025-09-07 299/week @ 2025-09-14

1,000 downloads per month
Used in 3 crates

MIT license

25KB
493 lines

axum-yaml

axum-yaml adds YAML features to axum

Documentation Crates.io

Features

  • Serialize, Deserialize YAML from request/response

Usage Example

Extractor example

When used as an extractor, it can deserialize request bodies into some type that implements serde::Deserialize. If the request body cannot be parsed, or it does not contain the Content-Type: application/yaml header, it will reject the request and return a 400 Bad Request response.

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] Also, you can construct a Yaml<T> from a byte slice (Yaml::from_bytes()). Most users should prefer to use the FromRequest impl but special cases may require first extracting a Request into Bytes then optionally constructing a Yaml<T>.

Response example

When used as a response, it can serialize any type that implements serde::Serialize to YAML, and will automatically set Content-Type: application/yaml header.

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));

License

This project is licensed under the MIT license

Dependencies

~2.7–3.5MB
~74K SLoC