diff --git a/garde/Cargo.toml b/garde/Cargo.toml index bb6fa15..a227fbd 100644 --- a/garde/Cargo.toml +++ b/garde/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garde" -version = "0.19.2" +version = "0.20.0" edition = "2021" repository = "https://github.com/jprochazk/garde" license = "MIT OR Apache-2.0" @@ -36,7 +36,7 @@ pattern = ["regex"] # for backward compatibility with <0.14.0 js-sys = ["dep:js-sys"] [dependencies] -garde_derive = { version = "0.19.2", path = "../garde_derive", optional = true, default-features = false } +garde_derive = { version = "0.20.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/src/rules/phone_number.rs b/garde/src/rules/phone_number.rs index d2092a9..68c1afb 100644 --- a/garde/src/rules/phone_number.rs +++ b/garde/src/rules/phone_number.rs @@ -19,34 +19,35 @@ use super::AsStr; use crate::error::Error; pub fn apply(v: &T, _: ()) -> Result<(), Error> { - if let Err(e) = v.validate_phone_number() { - return Err(Error::new(format!("not a valid phone number: {e}"))); + match v.validate_phone_number() { + Ok(true) => Ok(()), + Ok(false) => Err(Error::new("not a valid phone number")), + Err(e) => Err(Error::new(format!("not a valid phone number: {e}"))), } - Ok(()) } pub trait PhoneNumber { type Error: Display; - fn validate_phone_number(&self) -> Result<(), Self::Error>; + fn validate_phone_number(&self) -> Result; } impl PhoneNumber for T { type Error = phonenumber::ParseError; - fn validate_phone_number(&self) -> Result<(), Self::Error> { - let _ = phonenumber::PhoneNumber::from_str(self.as_str())?; - Ok(()) + fn validate_phone_number(&self) -> Result { + let number = phonenumber::PhoneNumber::from_str(self.as_str())?; + Ok(number.is_valid()) } } impl PhoneNumber for Option { type Error = T::Error; - fn validate_phone_number(&self) -> Result<(), Self::Error> { + fn validate_phone_number(&self) -> Result { match self { Some(value) => value.validate_phone_number(), - None => Ok(()), + None => Ok(true), } } } diff --git a/garde_derive/Cargo.toml b/garde_derive/Cargo.toml index 94e1346..56ecdd3 100644 --- a/garde_derive/Cargo.toml +++ b/garde_derive/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garde_derive" -version = "0.19.2" +version = "0.20.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 e7bff40..dcfde49 100644 --- a/integrations/axum_garde/Cargo.toml +++ b/integrations/axum_garde/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "axum_garde" -version = "0.19.2" +version = "0.20.0" edition = "2021" repository = "https://github.com/jprochazk/garde" license = "MIT OR Apache-2.0" @@ -25,13 +25,13 @@ axum = { version = "0.7", default-features = false } axum-extra = { version = "0.9", 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 = { version = "0.19.2", path = "../../garde", default-features = false } +garde = { version = "0.20.0", path = "../../garde", default-features = false } thiserror = { version = "1.0", default-features = false } [dev-dependencies] serde = { version = "1", features = ["derive"] } serde_json = { version = "1" } -garde = { version = "0.19.2", path = "../../garde", features = [ +garde = { version = "0.20.0", path = "../../garde", features = [ "full", "derive", ] }