From 51502e19c98d91e92e555dd6db730268f4df4547 Mon Sep 17 00:00:00 2001 From: jprochazk <1665677+jprochazk@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:45:32 +0100 Subject: [PATCH 1/8] move semver-checks before version bump --- xtask/src/task/version.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/xtask/src/task/version.rs b/xtask/src/task/version.rs index c9315b8..040913e 100644 --- a/xtask/src/task/version.rs +++ b/xtask/src/task/version.rs @@ -28,22 +28,26 @@ impl Bump { impl argp::FromArgValue for Bump { fn from_arg_value(value: &std::ffi::OsStr) -> std::result::Result { - let options = [ + [ ("patch", Bump::Patch), ("minor", Bump::Minor), ("major", Bump::Major), - ]; - - options - .into_iter() - .find(|(name, _)| value.eq_ignore_ascii_case(name)) - .map(|(_, bump)| bump) - .ok_or_else(|| "invalid bump kind, expected one of: major, minor, patch".into()) + ] + .into_iter() + .find(|(name, _)| value.eq_ignore_ascii_case(name)) + .map(|(_, bump)| bump) + .ok_or_else(|| "invalid bump kind, expected one of: major, minor, patch".into()) } } impl Version { pub fn run(self) -> Result { + cargo("semver-checks") + .with_arg("--all-features") + .with_args(["-p", "garde"]) + .with_args(["--release-type", self.bump.as_str()]) + .run_async()?; + // TODO: manually parse workspace and bump versions cargo("workspaces") .with_arg("version") @@ -51,10 +55,6 @@ impl Version { .with_args(["--force", "*"]) .run_async()?; - cargo("semver-checks") - .with_arg("--all-features") - .run_async()?; - Ok(()) } } From e09ffe73d490939695514a9b5980f9a09226f67d Mon Sep 17 00:00:00 2001 From: jprochazk <1665677+jprochazk@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:45:52 +0100 Subject: [PATCH 2/8] simplify expression --- xtask/src/task/test.rs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/xtask/src/task/test.rs b/xtask/src/task/test.rs index 7d6a457..e2bddfa 100644 --- a/xtask/src/task/test.rs +++ b/xtask/src/task/test.rs @@ -43,19 +43,17 @@ impl std::fmt::Display for InvalidTarget { impl argp::FromArgValue for Target { fn from_arg_value(value: &std::ffi::OsStr) -> std::result::Result { - let options = [ + [ ("unit", Self::Unit), ("doc", Self::Doc), ("ui", Self::Ui), ("rules", Self::Rules), ("axum", Self::Axum), - ]; - - options - .into_iter() - .find(|(name, _)| value.eq_ignore_ascii_case(std::ffi::OsStr::new(name))) - .map(|(_, target)| target) - .ok_or_else(|| "invalid target, expected one of: unit, doc, ui, rules, axum".into()) + ] + .into_iter() + .find(|(name, _)| value.eq_ignore_ascii_case(std::ffi::OsStr::new(name))) + .map(|(_, target)| target) + .ok_or_else(|| "invalid target, expected one of: unit, doc, ui, rules, axum".into()) } } From c56edc47e156a559a5a2788940e5cd2401f76cae Mon Sep 17 00:00:00 2001 From: jprochazk <1665677+jprochazk@users.noreply.github.com> Date: Sun, 26 Nov 2023 16:49:12 +0100 Subject: [PATCH 3/8] add `version` and `publish` to `xtask` --- xtask/src/task.rs | 5 +++-- xtask/src/task/check.rs | 2 +- xtask/src/task/publish.rs | 18 ++++++++++++++++++ xtask/src/task/release.rs | 13 ------------- xtask/src/task/setup.rs | 2 +- xtask/src/task/test.rs | 2 +- xtask/src/task/version.rs | 2 +- 7 files changed, 25 insertions(+), 19 deletions(-) create mode 100644 xtask/src/task/publish.rs delete mode 100644 xtask/src/task/release.rs diff --git a/xtask/src/task.rs b/xtask/src/task.rs index 4c1f938..cd71e54 100644 --- a/xtask/src/task.rs +++ b/xtask/src/task.rs @@ -1,5 +1,5 @@ mod check; -mod release; +mod publish; mod setup; mod test; mod version; @@ -15,7 +15,7 @@ pub enum Task { Check(check::Check), Setup(setup::Setup), Version(version::Version), - // Release(Release), + Publish(publish::Publish), } impl Task { @@ -25,6 +25,7 @@ impl Task { Task::Check(cmd) => cmd.run(), Task::Setup(cmd) => cmd.run(), Task::Version(cmd) => cmd.run(), + Task::Publish(cmd) => cmd.run(), } } } diff --git a/xtask/src/task/check.rs b/xtask/src/task/check.rs index a87d4f1..9776a78 100644 --- a/xtask/src/task/check.rs +++ b/xtask/src/task/check.rs @@ -1,6 +1,6 @@ use argp::FromArgs; -use crate::util::{cargo, CommandExt}; +use crate::util::{cargo, CommandExt as _}; use crate::Result; #[derive(FromArgs)] diff --git a/xtask/src/task/publish.rs b/xtask/src/task/publish.rs new file mode 100644 index 0000000..ad89a3f --- /dev/null +++ b/xtask/src/task/publish.rs @@ -0,0 +1,18 @@ +use argp::FromArgs; + +use crate::util::{cargo, CommandExt as _}; +use crate::Result; + +#[derive(FromArgs)] +#[argp(subcommand, name = "publish", description = "Publish to crates.io")] +pub struct Publish {} + +impl Publish { + pub fn run(self) -> Result { + cargo("publish").with_args(["-p", "garde_derive"]).run()?; + cargo("publish").with_args(["-p", "garde"]).run()?; + cargo("publish").with_args(["-p", "axum_garde"]).run()?; + + Ok(()) + } +} diff --git a/xtask/src/task/release.rs b/xtask/src/task/release.rs deleted file mode 100644 index fe12d75..0000000 --- a/xtask/src/task/release.rs +++ /dev/null @@ -1,13 +0,0 @@ -use argp::FromArgs; - -use crate::Result; - -#[derive(FromArgs)] -#[argp(subcommand, name = "release", description = "Release to crates.io")] -pub struct Release {} - -impl Release { - pub fn run(self) -> Result { - Ok(()) - } -} diff --git a/xtask/src/task/setup.rs b/xtask/src/task/setup.rs index fdb6940..e6422be 100644 --- a/xtask/src/task/setup.rs +++ b/xtask/src/task/setup.rs @@ -1,6 +1,6 @@ use argp::FromArgs; -use crate::util::{cargo, has_cargo_subcmd, rustup, CommandExt}; +use crate::util::{cargo, has_cargo_subcmd, rustup, CommandExt as _}; use crate::Result; const COMPONENTS: &[&str] = &["rustfmt", "clippy"]; diff --git a/xtask/src/task/test.rs b/xtask/src/task/test.rs index e2bddfa..114445c 100644 --- a/xtask/src/task/test.rs +++ b/xtask/src/task/test.rs @@ -4,7 +4,7 @@ use std::process::Command; use argp::FromArgs; -use crate::util::{cargo, CommandExt}; +use crate::util::{cargo, CommandExt as _}; use crate::Result; #[derive(FromArgs)] diff --git a/xtask/src/task/version.rs b/xtask/src/task/version.rs index 040913e..fb89600 100644 --- a/xtask/src/task/version.rs +++ b/xtask/src/task/version.rs @@ -1,6 +1,6 @@ use argp::FromArgs; -use crate::util::{cargo, CommandExt}; +use crate::util::{cargo, CommandExt as _}; use crate::Result; #[derive(FromArgs)] From de1dfe87f0409a5ab626a54f719b958ecae3ba9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Nieto?= Date: Mon, 4 Dec 2023 17:37:15 +0100 Subject: [PATCH 4/8] fix: unsealed PathComponentKind to allow custom key types in garde. --- garde/src/error.rs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/garde/src/error.rs b/garde/src/error.rs index 7ea037e..d12ecb3 100644 --- a/garde/src/error.rs +++ b/garde/src/error.rs @@ -110,13 +110,12 @@ impl std::fmt::Display for NoKey { } } -pub trait PathComponentKind: std::fmt::Display + ToCompactString + private::Sealed { +pub trait PathComponentKind: std::fmt::Display + ToCompactString { fn component_kind() -> Kind; } macro_rules! impl_path_component_kind { ($(@$($G:lifetime)*;)? $T:ty => $which:ident) => { - impl $(<$($G),*>)? private::Sealed for $T {} impl $(<$($G),*>)? PathComponentKind for $T { fn component_kind() -> Kind { Kind::$which @@ -132,17 +131,12 @@ impl_path_component_kind!(String => Key); impl_path_component_kind!(CompactString => Key); impl_path_component_kind!(NoKey => None); -impl<'a, T: PathComponentKind> private::Sealed for &'a T {} impl<'a, T: PathComponentKind> PathComponentKind for &'a T { fn component_kind() -> Kind { T::component_kind() } } -mod private { - pub trait Sealed {} -} - impl Path { pub fn empty() -> Self { Self { From 86c36354668d8a0702810591aa8217db9b72e13b Mon Sep 17 00:00:00 2001 From: dpytaylo Date: Fri, 29 Dec 2023 19:54:29 +0200 Subject: [PATCH 5/8] update axum to 0.7 --- integrations/axum_garde/Cargo.toml | 28 ++++----- .../axum_garde/examples/custom_validation.rs | 18 ++++-- integrations/axum_garde/examples/json.rs | 18 ++++-- .../axum_garde/src/with_validation.rs | 60 +++++++++---------- 4 files changed, 69 insertions(+), 55 deletions(-) diff --git a/integrations/axum_garde/Cargo.toml b/integrations/axum_garde/Cargo.toml index 243d4cd..707992f 100644 --- a/integrations/axum_garde/Cargo.toml +++ b/integrations/axum_garde/Cargo.toml @@ -21,23 +21,23 @@ axum-extra-protobuf = ["axum-extra/protobuf"] axum-extra-query = ["axum-extra/query"] [dependencies] -axum = { version = "0.6.17", default-features = false } -axum-extra = { version = "0.7.4", default-features = false, optional = true } -axum-yaml = { version = "0.3.0", default-features = false, optional = true } -axum-msgpack = { version = "0.3.0", default-features = false, optional = true } -garde = { version = "0.16.0", path = "../../garde", default-features = false } -thiserror = { version = "1.0.40", default-features = false } +axum = { version = "0.7", default-features = false } +axum-extra = { version = "0.9", default-features = false, optional = true } +axum-yaml = { version = "0.3", default-features = false, optional = true } +axum-msgpack = { version = "0.3", default-features = false, optional = true } +garde = { path = "../../garde", default-features = false } +thiserror = { version = "1.0", default-features = false } [dev-dependencies] serde = { version = "1", features = ["derive"] } -serde_json = { version = "1.0.96" } -garde = { version = "0.16.0", path = "../../garde", features = ["default", "derive"] } -axum = { version = "0.6.17", features = ["default", "macros"] } -axum-test = { version = "10.1.0" } -tokio = { version = "1.28.0", features = ["full"] } -prost = { version = "0.11.9" } -rstest = { version = "0.17.0" } -speculoos = { version = "0.11.0" } +serde_json = { version = "1" } +garde = { version = "0.16", path = "../../garde", features = ["default", "derive"] } +axum = { version = "0.7", features = ["default", "macros"] } +axum-test = { version = "14.1" } +tokio = { version = "1.28", features = ["full"] } +prost = { version = "0.12" } +rstest = { version = "0.18" } +speculoos = { version = "0.11" } [[example]] name = "json" diff --git a/integrations/axum_garde/examples/custom_validation.rs b/integrations/axum_garde/examples/custom_validation.rs index 6e50b01..6c53bcf 100644 --- a/integrations/axum_garde/examples/custom_validation.rs +++ b/integrations/axum_garde/examples/custom_validation.rs @@ -7,10 +7,11 @@ //! ``` use axum::response::IntoResponse; use axum::routing::post; -use axum::{Json, Router, Server}; +use axum::{Json, Router}; use axum_garde::WithValidation; use garde::Validate; use serde::{Deserialize, Serialize}; +use tokio::net::TcpListener; // Define your valid scheme #[derive(Debug, Serialize, Deserialize, Validate)] @@ -50,9 +51,16 @@ async fn main() { .route("/person", post(insert_valid_person)) // Create the application state .with_state(PasswordContext { complexity: 10 }); + println!("See example: http://127.0.0.1:8080/person"); - Server::bind(&([127, 0, 0, 1], 8080).into()) - .serve(app.into_make_service()) - .await - .unwrap(); + + axum::serve( + TcpListener::bind("127.0.0.1:8080") + .await + .expect("Failed to bind the address"), + + app.into_make_service(), + ) + .await + .expect("Failed to start axum serve"); } diff --git a/integrations/axum_garde/examples/json.rs b/integrations/axum_garde/examples/json.rs index 69cc2c0..b8e84c4 100644 --- a/integrations/axum_garde/examples/json.rs +++ b/integrations/axum_garde/examples/json.rs @@ -7,10 +7,11 @@ //! ``` use axum::response::IntoResponse; use axum::routing::post; -use axum::{Json, Router, Server}; +use axum::{Json, Router}; use axum_garde::WithValidation; use garde::Validate; use serde::{Deserialize, Serialize}; +use tokio::net::TcpListener; // Define your valid scheme #[derive(Debug, Serialize, Deserialize, Validate)] @@ -43,9 +44,16 @@ async fn main() { .route("/person", post(insert_valid_person)) // Create the application state .with_state(AppState); + println!("See example: http://127.0.0.1:8080/person"); - Server::bind(&([127, 0, 0, 1], 8080).into()) - .serve(app.into_make_service()) - .await - .unwrap(); + + axum::serve( + TcpListener::bind("127.0.0.1:8080") + .await + .expect("Failed to bind the address"), + + app.into_make_service(), + ) + .await + .expect("Failed to start axum serve"); } diff --git a/integrations/axum_garde/src/with_validation.rs b/integrations/axum_garde/src/with_validation.rs index 5131b87..9daab48 100644 --- a/integrations/axum_garde/src/with_validation.rs +++ b/integrations/axum_garde/src/with_validation.rs @@ -2,6 +2,7 @@ use std::fmt::Debug; use std::ops::Deref; use axum::async_trait; +use axum::body::Body; use axum::extract::{FromRef, FromRequest, FromRequestParts}; use axum::http::request::Parts; use axum::http::Request; @@ -22,34 +23,32 @@ use super::{IntoInner, WithValidationRejection}; /// The desired validation context ([`garde::Validate::Context`](garde::Validate)) /// must be provided as router state /// -#[cfg_attr( - feature = "json", - doc = r#" -### Example - -``` -use axum::Json; -use serde::{Serialize,Deserialize}; -use garde::Validate; -use axum_garde::WithValidation; -#[derive(Debug, Serialize, Deserialize, Validate)] -struct Person { - #[garde(length(min = 1, max = 10))] - name: String -} -async fn handler( - WithValidation(valid_person): WithValidation>, -) -> String{ - format!("{valid_person:?}") -} -# // Assert that handler compiles -# axum::Router::<_, axum::body::BoxBody>::new() -# .route("/", axum::routing::post(handler)) -# .with_state(()) -# .into_make_service(); -``` -"# -)] +/// ### Example +#[cfg_attr(feature = "json", doc = "```rust")] +#[cfg_attr(not(feature = "json"), doc = "```compile_fail")] +/// use axum::Json; +/// use serde::{Serialize,Deserialize}; +/// use garde::Validate; +/// use axum_garde::WithValidation; +/// +/// #[derive(Debug, Serialize, Deserialize, Validate)] +/// struct Person { +/// #[garde(length(min = 1, max = 10))] +/// name: String +/// } +/// +/// async fn handler( +/// WithValidation(valid_person): WithValidation>, +/// ) -> String{ +/// format!("{valid_person:?}") +/// } +/// +/// # // Assert that handler compiles +/// # axum::Router::new() +/// # .route("/", axum::routing::post(handler)) +/// # .with_state(()) +/// # .into_make_service(); +/// ``` /// [`FromRequestParts`]: axum::extract::FromRequestParts /// [`FromRequest`]: axum::extract::FromRequest /// [`IntoInner`]: crate::IntoInner @@ -83,11 +82,10 @@ where } #[async_trait] -impl FromRequest for WithValidation +impl FromRequest for WithValidation where - Body: Send + 'static, State: Send + Sync, - Extractor: FromRequest + IntoInner, + Extractor: FromRequest + IntoInner, Extractor::Inner: Validate, Context: FromRef, { From ca8c59fea66a7fe15d57c0c966a6f49e76d6d1e3 Mon Sep 17 00:00:00 2001 From: dpytaylo Date: Fri, 29 Dec 2023 20:11:18 +0200 Subject: [PATCH 6/8] cargo fmt --- integrations/axum_garde/examples/custom_validation.rs | 1 - integrations/axum_garde/examples/json.rs | 5 ++--- integrations/axum_garde/src/with_validation.rs | 6 +++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/integrations/axum_garde/examples/custom_validation.rs b/integrations/axum_garde/examples/custom_validation.rs index 6c53bcf..8122c7a 100644 --- a/integrations/axum_garde/examples/custom_validation.rs +++ b/integrations/axum_garde/examples/custom_validation.rs @@ -58,7 +58,6 @@ async fn main() { TcpListener::bind("127.0.0.1:8080") .await .expect("Failed to bind the address"), - app.into_make_service(), ) .await diff --git a/integrations/axum_garde/examples/json.rs b/integrations/axum_garde/examples/json.rs index b8e84c4..6e6d75a 100644 --- a/integrations/axum_garde/examples/json.rs +++ b/integrations/axum_garde/examples/json.rs @@ -44,14 +44,13 @@ async fn main() { .route("/person", post(insert_valid_person)) // Create the application state .with_state(AppState); - + println!("See example: http://127.0.0.1:8080/person"); - + axum::serve( TcpListener::bind("127.0.0.1:8080") .await .expect("Failed to bind the address"), - app.into_make_service(), ) .await diff --git a/integrations/axum_garde/src/with_validation.rs b/integrations/axum_garde/src/with_validation.rs index 9daab48..19c570c 100644 --- a/integrations/axum_garde/src/with_validation.rs +++ b/integrations/axum_garde/src/with_validation.rs @@ -30,19 +30,19 @@ use super::{IntoInner, WithValidationRejection}; /// use serde::{Serialize,Deserialize}; /// use garde::Validate; /// use axum_garde::WithValidation; -/// +/// /// #[derive(Debug, Serialize, Deserialize, Validate)] /// struct Person { /// #[garde(length(min = 1, max = 10))] /// name: String /// } -/// +/// /// async fn handler( /// WithValidation(valid_person): WithValidation>, /// ) -> String{ /// format!("{valid_person:?}") /// } -/// +/// /// # // Assert that handler compiles /// # axum::Router::new() /// # .route("/", axum::routing::post(handler)) From a6329520d3de657ba57e6a35e3fdf7e241105199 Mon Sep 17 00:00:00 2001 From: dpytaylo Date: Tue, 2 Jan 2024 20:39:46 +0200 Subject: [PATCH 7/8] Update dependencies --- integrations/axum_garde/Cargo.toml | 4 ++-- integrations/axum_garde/src/error.rs | 1 + integrations/axum_garde/src/into_inner.rs | 3 ++- integrations/axum_garde/src/with_validation.rs | 12 ++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/integrations/axum_garde/Cargo.toml b/integrations/axum_garde/Cargo.toml index 707992f..cfee116 100644 --- a/integrations/axum_garde/Cargo.toml +++ b/integrations/axum_garde/Cargo.toml @@ -23,8 +23,8 @@ axum-extra-query = ["axum-extra/query"] [dependencies] axum = { version = "0.7", default-features = false } axum-extra = { version = "0.9", default-features = false, optional = true } -axum-yaml = { version = "0.3", default-features = false, optional = true } -axum-msgpack = { version = "0.3", default-features = false, optional = true } +axum-yaml = { version = "0.4", default-features = false, optional = true } +axum-msgpack = { version = "0.4", default-features = false, optional = true } garde = { path = "../../garde", default-features = false } thiserror = { version = "1.0", default-features = false } diff --git a/integrations/axum_garde/src/error.rs b/integrations/axum_garde/src/error.rs index eb95328..68bb2b3 100644 --- a/integrations/axum_garde/src/error.rs +++ b/integrations/axum_garde/src/error.rs @@ -11,6 +11,7 @@ pub enum WithValidationRejection { /// Variant for the extractor's rejection #[error(transparent)] ExtractionError(T), + /// Variant for the payload's validation errors. Responds with status code /// `422 Unprocessable Content` #[error(transparent)] diff --git a/integrations/axum_garde/src/into_inner.rs b/integrations/axum_garde/src/into_inner.rs index bbfeafb..cdc59f1 100644 --- a/integrations/axum_garde/src/into_inner.rs +++ b/integrations/axum_garde/src/into_inner.rs @@ -22,7 +22,8 @@ macro_rules! impl_into_inner_simple { } }; } -#[allow(unused_macros)] + +#[cfg(feature = "axum-extra")] macro_rules! impl_into_inner_wrapper { ( $name:ty, diff --git a/integrations/axum_garde/src/with_validation.rs b/integrations/axum_garde/src/with_validation.rs index 19c570c..58c5f53 100644 --- a/integrations/axum_garde/src/with_validation.rs +++ b/integrations/axum_garde/src/with_validation.rs @@ -72,11 +72,11 @@ where let value = Extractor::from_request_parts(parts, state) .await .map_err(WithValidationRejection::ExtractionError)?; + let ctx = FromRef::from_ref(state); let value = value.into_inner(); - let value = Unvalidated::new(value) - .validate(&ctx) - .map_err(WithValidationRejection::ValidationError)?; + let value = Unvalidated::new(value).validate(&ctx)?; + Ok(WithValidation(value)) } } @@ -95,11 +95,11 @@ where let value = Extractor::from_request(req, state) .await .map_err(WithValidationRejection::ExtractionError)?; + let ctx = FromRef::from_ref(state); let value = value.into_inner(); - let value = Unvalidated::new(value) - .validate(&ctx) - .map_err(WithValidationRejection::ValidationError)?; + let value = Unvalidated::new(value).validate(&ctx)?; + Ok(WithValidation(value)) } } From 59e21481101dff0ac87eb158fac5058d39f74962 Mon Sep 17 00:00:00 2001 From: jprochazk <1665677+jprochazk@users.noreply.github.com> Date: Fri, 5 Jan 2024 00:06:47 +0100 Subject: [PATCH 8/8] Release 0.17.0 axum_garde@0.17.0 garde@0.17.0 garde_derive@0.17.0 Generated by cargo-workspaces --- garde/Cargo.toml | 4 ++-- garde_derive/Cargo.toml | 2 +- integrations/axum_garde/Cargo.toml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/garde/Cargo.toml b/garde/Cargo.toml index e97c20d..36dcda2 100644 --- a/garde/Cargo.toml +++ b/garde/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garde" -version = "0.16.3" +version = "0.17.0" edition = "2021" repository = "https://github.com/jprochazk/garde" license = "MIT OR Apache-2.0" @@ -33,7 +33,7 @@ pattern = ["regex"] # for backward compatibility with <0.14.0 js-sys = ["dep:js-sys"] [dependencies] -garde_derive = { version = "0.16.0", path = "../garde_derive", optional = true, default-features = false } +garde_derive = { version = "0.17.0", path = "../garde_derive", optional = true, default-features = false } smallvec = { version = "1.11.0", default-features = false } compact_str = { version = "0.7.1", default-features = false } diff --git a/garde_derive/Cargo.toml b/garde_derive/Cargo.toml index 950f0f3..b604486 100644 --- a/garde_derive/Cargo.toml +++ b/garde_derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garde_derive" -version = "0.16.3" +version = "0.17.0" edition = "2021" repository = "https://github.com/jprochazk/garde" license = "MIT OR Apache-2.0" diff --git a/integrations/axum_garde/Cargo.toml b/integrations/axum_garde/Cargo.toml index cfee116..88269b4 100644 --- a/integrations/axum_garde/Cargo.toml +++ b/integrations/axum_garde/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "axum_garde" -version = "0.16.3" +version = "0.17.0" edition = "2021" repository = "https://github.com/jprochazk/garde" license = "MIT OR Apache-2.0" @@ -31,7 +31,7 @@ thiserror = { version = "1.0", default-features = false } [dev-dependencies] serde = { version = "1", features = ["derive"] } serde_json = { version = "1" } -garde = { version = "0.16", path = "../../garde", features = ["default", "derive"] } +garde = { version = "0.17.0", path = "../../garde", features = ["default", "derive"] } axum = { version = "0.7", features = ["default", "macros"] } axum-test = { version = "14.1" } tokio = { version = "1.28", features = ["full"] }