Module axum_valid::typed_header
source · Expand description
Support for TypedHeader<T>
Feature
Enable the typed_header feature to use Valid<TypedHeader<T>>.
Usage
- Implement
HeaderandValidatefor your data typeT. - In your handler function, use
Valid<TypedHeader<T>>as some parameter’s type.
Example
use axum::headers::{Error, Header, HeaderValue};
use axum::http::HeaderName;
use axum::routing::post;
use axum::{Router, TypedHeader};
use axum_valid::Valid;
use validator::Validate;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let router = Router::new().route("/typed_header", post(handler));
axum::Server::bind(&([0u8, 0, 0, 0], 8080).into())
.serve(router.into_make_service())
.await?;
Ok(())
}
async fn handler(Valid(TypedHeader(parameter)): Valid<TypedHeader<Parameter>>) {
assert!(parameter.validate().is_ok());
}
#[derive(Validate)]
pub struct Parameter {
#[validate(range(min = 5, max = 10))]
pub v0: i32,
#[validate(length(min = 1, max = 10))]
pub v1: String,
}
static HEADER_NAME: HeaderName = HeaderName::from_static("my-header");
impl Header for Parameter {
fn name() -> &'static HeaderName {
&HEADER_NAME
}
fn decode<'i, I>(_values: &mut I) -> Result<Self, Error>
where
Self: Sized,
I: Iterator<Item = &'i HeaderValue>,
{
todo!()
}
fn encode<E: Extend<HeaderValue>>(&self, _values: &mut E) {
todo!()
}
}