3 releases (breaking)
0.4.0 | Jan 2, 2024 |
---|---|
0.3.0 | Dec 1, 2022 |
0.2.0 | May 25, 2022 |
#1694 in Parser implementations
995 downloads per month
Used in 3 crates
25KB
493 lines
axum-yaml
axum-yaml
adds YAML features to axum
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 theFromRequest
impl but special cases may require first extracting aRequest
intoBytes
then optionally constructing aYaml<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
~3.5–4.5MB
~89K SLoC