Module axum_valid::msgpack

source ·
Expand description

§Support for MsgPack<T> and MsgPackRaw<T> from axum-serde

§Feature

Enable the msgpack feature to use Valid<MsgPack<T>> and Valid<MsgPackRaw<T>>.

§Usage

  1. Implement Deserialize and Validate for your data type T.
  2. In your handler function, use Valid<MsgPack<T>> or Valid<MsgPackRaw<T>> as some parameter’s type.

§Example

#[cfg(feature = "validator")]
mod validator_example {
    use axum::routing::post;
    use axum::Json;
    use axum::Router;
    use axum_serde::{MsgPack, MsgPackRaw};
    use axum_valid::Valid;
    use serde::Deserialize;
    use validator::Validate;

    pub fn router() -> Router {
        Router::new()
            .route("/msgpack", post(handler))
            .route("/msgpackraw", post(raw_handler))
    }
    async fn handler(Valid(MsgPack(parameter)): Valid<MsgPack<Parameter>>) {
        assert!(parameter.validate().is_ok());
    }

    async fn raw_handler(Valid(MsgPackRaw(parameter)): Valid<MsgPackRaw<Parameter>>) {
        assert!(parameter.validate().is_ok());
    }
    #[derive(Validate, Deserialize)]
    pub struct Parameter {
        #[validate(range(min = 5, max = 10))]
        pub v0: i32,
        #[validate(length(min = 1, max = 10))]
        pub v1: String,
    }
}

#[cfg(feature = "garde")]
mod garde_example {
    use axum::routing::post;
    use axum::Router;
    use axum_serde::{MsgPack, MsgPackRaw};
    use axum_valid::Garde;
    use serde::Deserialize;
    use garde::Validate;
     
    pub fn router() -> Router {
        Router::new()
            .route("/msgpack", post(handler))
            .route("/msgpackraw", post(raw_handler))
    }

    async fn handler(Garde(MsgPack(parameter)): Garde<MsgPack<Parameter>>) {
        assert!(parameter.validate(&()).is_ok());
    }

    async fn raw_handler(Garde(MsgPackRaw(parameter)): Garde<MsgPackRaw<Parameter>>) {
        assert!(parameter.validate(&()).is_ok());
    }
    #[derive(Validate, Deserialize)]
    pub struct Parameter {
        #[garde(range(min = 5, max = 10))]
        pub v0: i32,
        #[garde(length(min = 1, max = 10))]
        pub v1: String,
    }
}