Crate facet_axum

Crate facet_axum 

Source
Expand description

Axum integration for Facet.

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.

§Features

  • json (default): Enables Json<T> extractor/response using facet-json
  • form (default): Enables Form<T> and Query<T> extractors using facet-urlencoded

§Example

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

Structs§

Form
A wrapper type for URL-encoded form data deserialization.
FormRejection
Rejection type for form extraction errors.
Json
A wrapper type for JSON-encoded request/response bodies.
JsonRejection
Rejection type for JSON extraction errors.
Query
A wrapper type for URL query parameter deserialization.
QueryRejection
Rejection type for query parameter extraction errors.