facet-axum

Crates.iofacet-axum
lib.rsfacet-axum
version0.43.1
created_at2025-12-11 16:57:25.470144+00
updated_at2026-01-23 08:52:29.738135+00
descriptionAxum integration for Facet - extractors and responses using Facet's serialization
homepagehttps://facet.rs
repositoryhttps://github.com/facet-rs/facet
max_upload_size
id1980133
size41,301
Amos Wenger (fasterthanlime)

documentation

README

facet-axum

Coverage Status crates.io documentation MIT/Apache-2.0 licensed Discord

facet-axum

Axum integration for Facet - extractors and responses using Facet's serialization.

This crate provides Axum extractors and response types that use Facet's serialization instead of serde. This allows you to use Facet-derived types directly in your Axum handlers without needing serde derives.

Quick start

use axum::{routing::{get, post}, Router};
use facet::Facet;
use facet_axum::{Json, Query};

#[derive(Debug, Facet)]
struct CreateUser {
    name: String,
    email: String,
}

#[derive(Debug, Facet)]
struct User {
    id: u64,
    name: String,
    email: String,
}

#[derive(Debug, Facet)]
struct SearchParams {
    q: String,
    page: u64,
}

async fn create_user(Json(payload): Json<CreateUser>) -> Json<User> {
    Json(User {
        id: 1,
        name: payload.name,
        email: payload.email,
    })
}

async fn search(Query(params): Query<SearchParams>) -> String {
    format!("Searching for '{}' on page {}", params.q, params.page)
}

let app = Router::new()
    .route("/users", post(create_user))
    .route("/search", get(search));

Feature flags

  • json (default): Enables Json<T> extractor/response using facet-json
  • form (default): Enables Form<T> and Query<T> extractors using facet-urlencoded
  • yaml: Enables Yaml<T> extractor/response using facet-yaml
  • toml: Enables Toml<T> extractor/response using facet-toml
  • xml: Enables Xml<T> extractor/response using facet-xml
  • msgpack: Enables MsgPack<T> extractor/response using facet-msgpack
  • postcard: Enables Postcard<T> extractor/response using facet-postcard
  • all: Enables all format features

Sponsors

Thanks to all individual sponsors:

GitHub Sponsors Patreon

...along with corporate sponsors:

AWS Zed Depot

...without whom this work could not exist.

Special thanks

The facet logo was drawn by Misiasart.

License

Licensed under either of:

at your option.

Commit count: 3380

cargo fmt