Module axum_valid::extra::typed_path
source · Expand description
§Support for T: TypedPath
from axum-extra
§Feature
Enable the extra_typed_path
feature to use Valid<T: TypedPath>
.
§Usage
- Implement
TypedPath
,Deserialize
,Validate
andHasValidate
for your data typeT
. - In your handler function, use
Valid<T>
as some parameter’s type.
§Example
#[cfg(feature = "validator")]
mod validator_example {
use axum::Router;
use axum_extra::routing::{RouterExt, TypedPath};
use axum_valid::{HasValidate, Valid};
use serde::Deserialize;
use validator::Validate;
pub fn router() -> Router {
Router::new().typed_get(handler)
}
async fn handler(parameter: Valid<Parameter>) {
assert!(parameter.validate().is_ok());
}
#[derive(TypedPath, Deserialize, Validate)]
#[typed_path("/extra_typed_path/:v0/:v1")]
struct Parameter {
#[validate(range(min = 5, max = 10))]
v0: i32,
#[validate(length(min = 1, max = 10))]
v1: String,
}
impl HasValidate for Parameter {
type Validate = Self;
fn get_validate(&self) -> &Self::Validate {
self
}
}
}
#[cfg(feature = "garde")]
mod garde_example {
use axum::Router;
use axum_extra::routing::{RouterExt, TypedPath};
use axum_valid::{HasValidate, Garde};
use serde::Deserialize;
use garde::Validate;
pub fn router() -> Router {
Router::new().typed_get(handler)
}
async fn handler(parameter: Garde<Parameter>) {
assert!(parameter.validate(&()).is_ok());
}
#[derive(TypedPath, Deserialize, Validate)]
#[typed_path("/extra_typed_path/:v0/:v1")]
struct Parameter {
#[garde(range(min = 5, max = 10))]
v0: i32,
#[garde(length(min = 1, max = 10))]
v1: String,
}
impl HasValidate for Parameter {
type Validate = Self;
fn get_validate(&self) -> &Self::Validate {
self
}
}
}