Files
axum-valid/README.md
2023-08-01 13:08:57 +08:00

2.0 KiB

axum-valid

crates.io LICENSE dependency status GitHub Workflow Status Coverage Status

This crate provides a Valid type that can be used in combination with Json, Path, Query, and Form types to validate the entities that implement the Validate trait.

Usage

cargo add axum-valid
use validator::Validate;
use serde::Deserialize;
use axum_valid::Valid;
use axum::extract::Query;
use axum::Json;

#[derive(Debug, Validate, Deserialize)]
pub struct Pager {
    #[validate(range(min = 1, max = 50))]
    pub page_size: usize,
    #[validate(range(min = 1))]
    pub page_no: usize,
}

pub async fn get_page_by_query(
    Valid(Query(pager)): Valid<Query<Pager>>,
) {
    assert!((1..=50).contains(&pager.page_size));
    assert!((1..).contains(&pager.page_no));
}

pub async fn get_page_by_json(
    Valid(Json(pager)): Valid<Json<Pager>>,
) {
    assert!((1..=50).contains(&pager.page_size));
    assert!((1..).contains(&pager.page_no));
}

When validation errors occur, the extractor will automatically return 400 with validation errors as the HTTP message body.

For more usage examples, please refer to the basic.rs and custom.rs files in the tests directory.

Features

  • 422: Use 422 Unprocessable Entity instead of 400 Bad Request as the status code when validation fails.
  • into_json: When this feature is enabled, validation errors will be serialized into JSON format and returned as the HTTP body.