Module axum_valid::typed_multipart
source · Expand description
§Support for TypedMultipart<T>
and BaseMultipart<T, R>
from axum_typed_multipart
§Feature
Enable the typed_multipart
feature to use Valid<TypedMultipart<T>>
and Valid<BaseMultipart<T, R>>
.
§Usage
- Implement
TryFromMultipart
andValidate
for your data typeT
. - In your handler function, use
Valid<TypedMultipart<T>>
orValid<BaseMultipart<T, E>
as some parameter’s type.
§Example
#[cfg(feature = "validator")]
mod validator_example {
use axum::routing::post;
use axum::Router;
use axum_typed_multipart::{BaseMultipart, TryFromMultipart, TypedMultipart, TypedMultipartError};
use axum_valid::Valid;
use validator::Validate;
pub fn router() -> Router {
Router::new()
.route("/typed_multipart", post(handler))
.route("/base_multipart", post(base_handler))
}
async fn handler(Valid(TypedMultipart(parameter)): Valid<TypedMultipart<Parameter>>) {
assert!(parameter.validate().is_ok());
// Support automatic dereferencing
println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1);
}
async fn base_handler(
Valid(BaseMultipart {
data: parameter, ..
}): Valid<BaseMultipart<Parameter, TypedMultipartError>>,
) {
assert!(parameter.validate().is_ok());
}
#[derive(TryFromMultipart, Validate)]
struct Parameter {
#[validate(range(min = 5, max = 10))]
v0: i32,
#[validate(length(min = 1, max = 10))]
v1: String,
}
}
#[cfg(feature = "garde")]
mod garde_example {
use axum::routing::post;
use axum::Router;
use axum_typed_multipart::{BaseMultipart, TryFromMultipart, TypedMultipart, TypedMultipartError};
use axum_valid::Garde;
use serde::Deserialize;
use garde::Validate;
pub fn router() -> Router {
Router::new()
.route("/typed_multipart", post(handler))
.route("/base_multipart", post(base_handler))
}
async fn handler(Garde(TypedMultipart(parameter)): Garde<TypedMultipart<Parameter>>) {
assert!(parameter.validate(&()).is_ok());
// Support automatic dereferencing
println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1);
}
async fn base_handler(
Garde(BaseMultipart {
data: parameter, ..
}): Garde<BaseMultipart<Parameter, TypedMultipartError>>,
) {
assert!(parameter.validate(&()).is_ok());
}
#[derive(TryFromMultipart, Validate)]
pub struct Parameter {
#[garde(range(min = 5, max = 10))]
pub v0: i32,
#[garde(length(min = 1, max = 10))]
pub v1: String,
}
}