Skip to content

Commit 9e1de75

Browse files
committed
validate phone number
1 parent b5b9d11 commit 9e1de75

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

garde/src/rules/phone_number.rs

+10-9
Original file line numberDiff line numberDiff line change
@@ -19,34 +19,35 @@ use super::AsStr;
1919
use crate::error::Error;
2020

2121
pub fn apply<T: PhoneNumber>(v: &T, _: ()) -> Result<(), Error> {
22-
if let Err(e) = v.validate_phone_number() {
23-
return Err(Error::new(format!("not a valid phone number: {e}")));
22+
match v.validate_phone_number() {
23+
Ok(true) => Ok(()),
24+
Ok(false) => Err(Error::new("not a valid phone number")),
25+
Err(e) => Err(Error::new(format!("not a valid phone number: {e}"))),
2426
}
25-
Ok(())
2627
}
2728

2829
pub trait PhoneNumber {
2930
type Error: Display;
3031

31-
fn validate_phone_number(&self) -> Result<(), Self::Error>;
32+
fn validate_phone_number(&self) -> Result<bool, Self::Error>;
3233
}
3334

3435
impl<T: AsStr> PhoneNumber for T {
3536
type Error = phonenumber::ParseError;
3637

37-
fn validate_phone_number(&self) -> Result<(), Self::Error> {
38-
let _ = phonenumber::PhoneNumber::from_str(self.as_str())?;
39-
Ok(())
38+
fn validate_phone_number(&self) -> Result<bool, Self::Error> {
39+
let number = phonenumber::PhoneNumber::from_str(self.as_str())?;
40+
Ok(number.is_valid())
4041
}
4142
}
4243

4344
impl<T: PhoneNumber> PhoneNumber for Option<T> {
4445
type Error = T::Error;
4546

46-
fn validate_phone_number(&self) -> Result<(), Self::Error> {
47+
fn validate_phone_number(&self) -> Result<bool, Self::Error> {
4748
match self {
4849
Some(value) => value.validate_phone_number(),
49-
None => Ok(()),
50+
None => Ok(true),
5051
}
5152
}
5253
}

0 commit comments

Comments
 (0)