diff --git a/README.md b/README.md index f1eec44..911ad5f 100644 --- a/README.md +++ b/README.md @@ -57,15 +57,10 @@ mod validator_example { println!("page_no: {}, page_size: {}", pager.page_no, pager.page_size); } - #[tokio::main] - pub async fn launch() -> anyhow::Result<()> { - let router = Router::new() + pub fn router() -> Router { + Router::new() .route("/query", get(pager_from_query)) - .route("/json", post(pager_from_json)); - axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) - .serve(router.into_make_service()) - .await?; - Ok(()) + .route("/json", post(pager_from_json)) } } @@ -102,23 +97,25 @@ mod garde_example { println!("page_no: {}, page_size: {}", pager.page_no, pager.page_size); } - #[tokio::main] - pub async fn launch() -> anyhow::Result<()> { - let router = Router::new() + pub fn router() -> Router { + Router::new() .route("/query", get(pager_from_query)) - .route("/json", post(pager_from_json)); - axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) - .serve(router.into_make_service()) - .await?; - Ok(()) + .route("/json", post(pager_from_json)) } } -fn main() -> anyhow::Result<()> { +#[tokio::main] +async fn main() -> anyhow::Result<()> { + use axum::Router; + + let router = Router::new(); #[cfg(feature = "validator")] - validator_example::launch()?; + let router = router.nest("/validator", validator_example::router()); #[cfg(feature = "garde")] - garde_example::launch()?; + let router = router.nest("/garde", garde_example::router()); + axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) + .serve(router.into_make_service()) + .await?; Ok(()) } ``` @@ -191,37 +188,38 @@ mod validator_example { assert!((1..).contains(&pager.page_no)); } - #[tokio::main] - pub async fn launch() -> anyhow::Result<()> { - let router = Router::new() + pub fn router() -> Router { + Router::new() .route("/form", post(pager_from_form_ex)) .with_state(PagerValidArgs { page_size_range: 1..=50, page_no_range: 1.., - }); + }) // NOTE: The PagerValidArgs can also be stored in a XxxState, // make sure it implements FromRef. - - axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) - .serve(router.into_make_service()) - .await?; - Ok(()) } } #[cfg(feature = "garde")] mod garde_example { - #[tokio::main] - pub async fn launch() -> anyhow::Result<()> { - Ok(()) + use axum::Router; + + pub fn router() -> Router { + Router::new() } } -fn main() -> anyhow::Result<()> { +#[tokio::main] +async fn main() -> anyhow::Result<()> { + use axum::Router; + let router = Router::new(); #[cfg(feature = "validator")] - validator_example::launch()?; + let router = router.nest("/validator", validator_example::router()); #[cfg(feature = "garde")] - garde_example::launch()?; + let router = router.nest("/garde", garde_example::router()); + axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) + .serve(router.into_make_service()) + .await?; Ok(()) } ``` diff --git a/src/extra/form.rs b/src/extra/form.rs index 9e8b1f8..ec26c19 100644 --- a/src/extra/form.rs +++ b/src/extra/form.rs @@ -12,30 +12,75 @@ //! ## Example //! //! ```no_run -//! use axum::routing::post; -//! use axum::Router; -//! use axum_extra::extract::Form; -//! use axum_valid::Valid; -//! use serde::Deserialize; -//! use validator::Validate; -//! #[tokio::main] -//! async fn main() -> anyhow::Result<()> { -//! let router = Router::new().route("/extra_form", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! #[cfg(feature = "validator")] +//! mod validator_example { +//! use axum::routing::post; +//! use axum_extra::extract::Form; +//! use axum::Router; +//! use axum_valid::Valid; +//! use serde::Deserialize; +//! use validator::Validate; +//! +//! pub fn router() -> Router { +//! Router::new().route("/form", post(handler)) +//! } +//! +//! async fn handler(Valid(Form(parameter)): Valid>) { +//! assert!(parameter.validate().is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! #[derive(Validate, Deserialize)] +//! pub struct Parameter { +//! #[validate(range(min = 5, max = 10))] +//! pub v0: i32, +//! #[validate(length(min = 1, max = 10))] +//! pub v1: String, +//! } //! } -//! async fn handler(Valid(Form(parameter)): Valid>) { -//! 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_extra::extract::Form; +//! use axum::Router; +//! use axum_valid::Garde; +//! use serde::Deserialize; +//! use garde::Validate; +//! +//! pub fn router() -> Router { +//! Router::new().route("/form", post(handler)) +//! } +//! +//! async fn handler(Garde(Form(parameter)): Garde>) { +//! assert!(parameter.validate(&()).is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! #[derive(Validate, Deserialize)] +//! pub struct Parameter { +//! #[garde(range(min = 5, max = 10))] +//! pub v0: i32, +//! #[garde(length(min = 1, max = 10))] +//! pub v1: String, +//! } //! } +//! +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); +//! # #[cfg(feature = "validator")] +//! # let router = router.nest("/validator", validator_example::router()); +//! # #[cfg(feature = "garde")] +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; +//! # Ok(()) +//! # } //! ``` use crate::HasValidate; diff --git a/src/extra/protobuf.rs b/src/extra/protobuf.rs index bf1aaa4..7f38956 100644 --- a/src/extra/protobuf.rs +++ b/src/extra/protobuf.rs @@ -12,32 +12,79 @@ //! ## Example //! //! ```no_run -//! use axum::routing::post; -//! use axum::Router; -//! use axum_extra::protobuf::Protobuf; -//! use axum_valid::Valid; -//! use validator::Validate; +//! #[cfg(feature = "validator")] +//! mod validator_example { +//! use axum::routing::post; +//! use axum_extra::protobuf::Protobuf; +//! use axum::Router; +//! use axum_valid::Valid; +//! use serde::Deserialize; +//! use validator::Validate; //! -//! #[tokio::main] -//! async fn main() -> anyhow::Result<()> { -//! let router = Router::new().route("/protobuf", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! pub fn router() -> Router { +//! Router::new().route("/protobuf", post(handler)) +//! } +//! +//! async fn handler(Valid(Protobuf(parameter)): Valid>) { +//! assert!(parameter.validate().is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! #[derive(Validate, prost::Message)] +//! pub struct Parameter { +//! #[validate(range(min = 5, max = 10))] +//! #[prost(int32, tag = "1")] +//! pub v0: i32, +//! #[validate(length(min = 1, max = 10))] +//! #[prost(string, tag = "2")] +//! pub v1: String, +//! } //! } -//! async fn handler(Valid(Protobuf(parameter)): Valid>) { -//! assert!(parameter.validate().is_ok()); -//! } -//! #[derive(Validate, prost::Message)] -//! pub struct Parameter { -//! #[validate(range(min = 5, max = 10))] -//! #[prost(int32, tag = "1")] -//! pub v0: i32, -//! #[validate(length(min = 1, max = 10))] -//! #[prost(string, tag = "2")] -//! pub v1: String, +//! +//! #[cfg(feature = "garde")] +//! mod garde_example { +//! use axum::routing::post; +//! use axum::Router; +//! use axum_extra::protobuf::Protobuf; +//! use axum_valid::Garde; +//! use serde::Deserialize; +//! use garde::Validate; +//! +//! pub fn router() -> Router { +//! Router::new().route("/protobuf", post(handler)) +//! } +//! +//! async fn handler(Garde(Protobuf(parameter)): Garde>) { +//! assert!(parameter.validate(&()).is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! #[derive(Validate, prost::Message)] +//! pub struct Parameter { +//! #[validate(range(min = 5, max = 10))] +//! #[prost(int32, tag = "1")] +//! pub v0: i32, +//! #[validate(length(min = 1, max = 10))] +//! #[prost(string, tag = "2")] +//! pub v1: String, +//! } //! } +//! +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); +//! # #[cfg(feature = "validator")] +//! # let router = router.nest("/validator", validator_example::router()); +//! # #[cfg(feature = "garde")] +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; +//! # Ok(()) +//! # } //! ``` use crate::HasValidate; diff --git a/src/extra/query.rs b/src/extra/query.rs index 2e7181d..b1f6f1a 100644 --- a/src/extra/query.rs +++ b/src/extra/query.rs @@ -12,33 +12,75 @@ //! ## Example //! //! ```no_run -//! use axum::routing::post; -//! use axum::Router; -//! use axum_extra::extract::Query; -//! use axum_valid::Valid; -//! use serde::Deserialize; -//! use validator::Validate; +//! #[cfg(feature = "validator")] +//! mod validator_example { +//! use axum_extra::extract::Query; +//! use axum::routing::post; +//! use axum::Router; +//! use axum_valid::Valid; +//! use serde::Deserialize; +//! use validator::Validate; //! -//! #[tokio::main] -//! async fn main() -> anyhow::Result<()> { -//! let router = Router::new().route("/extra_query", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! pub fn router() -> Router { +//! Router::new().route("/query", post(handler)) +//! } +//! +//! async fn handler(Valid(Query(parameter)): Valid>) { +//! assert!(parameter.validate().is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! #[derive(Validate, Deserialize)] +//! pub struct Parameter { +//! #[validate(range(min = 5, max = 10))] +//! pub v0: i32, +//! #[validate(length(min = 1, max = 10))] +//! pub v1: String, +//! } //! } //! -//! async fn handler(Valid(Query(parameter)): Valid>) { -//! assert!(parameter.validate().is_ok()); +//! #[cfg(feature = "garde")] +//! mod garde_example { +//! use axum::routing::post; +//! use axum_extra::extract::Query; +//! use axum::Router; +//! use axum_valid::Garde; +//! use serde::Deserialize; +//! use garde::Validate; +//! +//! pub fn router() -> Router { +//! Router::new().route("/query", post(handler)) +//! } +//! +//! async fn handler(Garde(Query(parameter)): Garde>) { +//! assert!(parameter.validate(&()).is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! #[derive(Validate, Deserialize)] +//! pub struct Parameter { +//! #[garde(range(min = 5, max = 10))] +//! pub v0: i32, +//! #[garde(length(min = 1, max = 10))] +//! pub v1: String, +//! } //! } //! -//! #[derive(Validate, Deserialize)] -//! pub struct Parameter { -//! #[validate(range(min = 5, max = 10))] -//! pub v0: i32, -//! #[validate(length(min = 1, max = 10))] -//! pub v1: String, -//! } +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); +//! # #[cfg(feature = "validator")] +//! # let router = router.nest("/validator", validator_example::router()); +//! # #[cfg(feature = "garde")] +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; +//! # Ok(()) +//! # } //! ``` use crate::HasValidate; diff --git a/src/form.rs b/src/form.rs index ab2e133..899892c 100644 --- a/src/form.rs +++ b/src/form.rs @@ -20,19 +20,17 @@ //! use axum_valid::Valid; //! use serde::Deserialize; //! use validator::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/form", post(handler)) //! } +//! //! async fn handler(Valid(Form(parameter)): Valid>) { //! assert!(parameter.validate().is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[validate(range(min = 5, max = 10))] @@ -50,19 +48,17 @@ //! use axum_valid::Garde; //! use serde::Deserialize; //! use garde::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/form", post(handler)) //! } +//! //! async fn handler(Garde(Form(parameter)): Garde>) { //! assert!(parameter.validate(&()).is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[garde(range(min = 5, max = 10))] @@ -72,11 +68,17 @@ //! } //! } //! -//! # fn main() -> anyhow::Result<()> { +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); //! # #[cfg(feature = "validator")] -//! # validator_example::launch()?; +//! # let router = router.nest("/validator", validator_example::router()); //! # #[cfg(feature = "garde")] -//! # garde_example::launch()?; +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; //! # Ok(()) //! # } //! ``` diff --git a/src/json.rs b/src/json.rs index f1a5823..8a95cad 100644 --- a/src/json.rs +++ b/src/json.rs @@ -20,19 +20,17 @@ //! use axum_valid::Valid; //! use serde::Deserialize; //! use validator::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/json", post(handler)) //! } +//! //! async fn handler(Valid(Json(parameter)): Valid>) { //! assert!(parameter.validate().is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[validate(range(min = 5, max = 10))] @@ -50,19 +48,17 @@ //! use axum_valid::Garde; //! use serde::Deserialize; //! use garde::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/json", post(handler)) //! } +//! //! async fn handler(Garde(Json(parameter)): Garde>) { //! assert!(parameter.validate(&()).is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[garde(range(min = 5, max = 10))] @@ -72,11 +68,17 @@ //! } //! } //! -//! # fn main() -> anyhow::Result<()> { +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); //! # #[cfg(feature = "validator")] -//! # validator_example::launch()?; +//! # let router = router.nest("/validator", validator_example::router()); //! # #[cfg(feature = "garde")] -//! # garde_example::launch()?; +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; //! # Ok(()) //! # } //! ``` diff --git a/src/msgpack.rs b/src/msgpack.rs index ef09b5c..4ce8b9d 100644 --- a/src/msgpack.rs +++ b/src/msgpack.rs @@ -21,15 +21,11 @@ //! use axum_valid::Valid; //! use serde::Deserialize; //! use validator::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new() +//! +//! pub fn router() -> Router { +//! Router::new() //! .route("/msgpack", post(handler)) -//! .route("/msgpackraw", post(raw_handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! .route("/msgpackraw", post(raw_handler)) //! } //! async fn handler(Valid(MsgPack(parameter)): Valid>) { //! assert!(parameter.validate().is_ok()); @@ -55,15 +51,11 @@ //! use axum_valid::Garde; //! use serde::Deserialize; //! use garde::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new() +//! +//! pub fn router() -> Router { +//! Router::new() //! .route("/msgpack", post(handler)) -//! .route("/msgpackraw", post(raw_handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! .route("/msgpackraw", post(raw_handler)) //! } //! //! async fn handler(Garde(MsgPack(parameter)): Garde>) { @@ -82,11 +74,17 @@ //! } //! } //! -//! # fn main() -> anyhow::Result<()> { +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); //! # #[cfg(feature = "validator")] -//! # validator_example::launch()?; +//! # let router = router.nest("/validator", validator_example::router()); //! # #[cfg(feature = "garde")] -//! # garde_example::launch()?; +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; //! # Ok(()) //! # } //! ``` diff --git a/src/path.rs b/src/path.rs index a685a62..6c105a0 100644 --- a/src/path.rs +++ b/src/path.rs @@ -16,19 +16,17 @@ //! use axum_valid::Valid; //! use serde::Deserialize; //! use validator::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/path", post(handler)) //! } +//! //! async fn handler(Valid(Path(parameter)): Valid>) { //! assert!(parameter.validate().is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[validate(range(min = 5, max = 10))] @@ -46,19 +44,17 @@ //! use axum_valid::Garde; //! use serde::Deserialize; //! use garde::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/path", post(handler)) //! } +//! //! async fn handler(Garde(Path(parameter)): Garde>) { //! assert!(parameter.validate(&()).is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[garde(range(min = 5, max = 10))] @@ -68,11 +64,17 @@ //! } //! } //! -//! # fn main() -> anyhow::Result<()> { +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); //! # #[cfg(feature = "validator")] -//! # validator_example::launch()?; +//! # let router = router.nest("/validator", validator_example::router()); //! # #[cfg(feature = "garde")] -//! # garde_example::launch()?; +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; //! # Ok(()) //! # } //! ``` diff --git a/src/query.rs b/src/query.rs index 70b28a2..8a936ad 100644 --- a/src/query.rs +++ b/src/query.rs @@ -20,19 +20,17 @@ //! use axum_valid::Valid; //! use serde::Deserialize; //! use validator::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/query", post(handler)) //! } +//! //! async fn handler(Valid(Query(parameter)): Valid>) { //! assert!(parameter.validate().is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[validate(range(min = 5, max = 10))] @@ -50,19 +48,17 @@ //! use axum_valid::Garde; //! use serde::Deserialize; //! use garde::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/query", post(handler)) //! } +//! //! async fn handler(Garde(Query(parameter)): Garde>) { //! assert!(parameter.validate(&()).is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[garde(range(min = 5, max = 10))] @@ -72,11 +68,17 @@ //! } //! } //! -//! # fn main() -> anyhow::Result<()> { +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); //! # #[cfg(feature = "validator")] -//! # validator_example::launch()?; +//! # let router = router.nest("/validator", validator_example::router()); //! # #[cfg(feature = "garde")] -//! # garde_example::launch()?; +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; //! # Ok(()) //! # } //! ``` diff --git a/src/typed_multipart.rs b/src/typed_multipart.rs index 08bfc62..86a43e9 100644 --- a/src/typed_multipart.rs +++ b/src/typed_multipart.rs @@ -12,44 +12,94 @@ //! ## Example //! //! ```no_run -//! #![cfg(feature = "validator")] +//! #[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; //! -//! 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)) +//! } //! -//! #[tokio::main] -//! async fn main() -> anyhow::Result<()> { -//! let router = Router::new() -//! .route("/typed_multipart", post(handler)) -//! .route("/base_multipart", post(base_handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! async fn handler(Valid(TypedMultipart(parameter)): Valid>) { +//! assert!(parameter.validate().is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! async fn base_handler( +//! Valid(BaseMultipart { +//! data: parameter, .. +//! }): Valid>, +//! ) { +//! 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, +//! } //! } //! -//! async fn handler(Valid(TypedMultipart(parameter)): Valid>) { -//! assert!(parameter.validate().is_ok()); +//! #[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>) { +//! assert!(parameter.validate(&()).is_ok()); +//! // Support automatic dereferencing +//! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); +//! } +//! +//! async fn base_handler( +//! Garde(BaseMultipart { +//! data: parameter, .. +//! }): Garde>, +//! ) { +//! 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, +//! } //! } //! -//! async fn base_handler( -//! Valid(BaseMultipart { -//! data: parameter, .. -//! }): Valid>, -//! ) { -//! 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, -//! } +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); +//! # #[cfg(feature = "validator")] +//! # let router = router.nest("/validator", validator_example::router()); +//! # #[cfg(feature = "garde")] +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; +//! # Ok(()) +//! # } //! ``` use crate::HasValidate; diff --git a/src/yaml.rs b/src/yaml.rs index 831d87f..2bfbf25 100644 --- a/src/yaml.rs +++ b/src/yaml.rs @@ -20,19 +20,17 @@ //! use axum_valid::Valid; //! use serde::Deserialize; //! use validator::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/yaml", post(handler)) //! } +//! //! async fn handler(Valid(Yaml(parameter)): Valid>) { //! assert!(parameter.validate().is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[validate(range(min = 5, max = 10))] @@ -50,19 +48,17 @@ //! use axum_valid::Garde; //! use serde::Deserialize; //! use garde::Validate; -//! #[tokio::main] -//! pub async fn launch() -> anyhow::Result<()> { -//! let router = Router::new().route("/json", post(handler)); -//! axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) -//! .serve(router.into_make_service()) -//! .await?; -//! Ok(()) +//! +//! pub fn router() -> Router { +//! Router::new().route("/yaml", post(handler)) //! } +//! //! async fn handler(Garde(Yaml(parameter)): Garde>) { //! assert!(parameter.validate(&()).is_ok()); //! // Support automatic dereferencing //! println!("v0 = {}, v1 = {}", parameter.v0, parameter.v1); //! } +//! //! #[derive(Validate, Deserialize)] //! pub struct Parameter { //! #[garde(range(min = 5, max = 10))] @@ -72,11 +68,17 @@ //! } //! } //! -//! # fn main() -> anyhow::Result<()> { +//! # #[tokio::main] +//! # async fn main() -> anyhow::Result<()> { +//! # use axum::Router; +//! # let router = Router::new(); //! # #[cfg(feature = "validator")] -//! # validator_example::launch()?; +//! # let router = router.nest("/validator", validator_example::router()); //! # #[cfg(feature = "garde")] -//! # garde_example::launch()?; +//! # let router = router.nest("/garde", garde_example::router()); +//! # axum::Server::bind(&([0u8, 0, 0, 0], 8080).into()) +//! # .serve(router.into_make_service()) +//! # .await?; //! # Ok(()) //! # } //! ```