use super::errors::EmailAddressError;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct EmailAddress(String);
impl EmailAddress {
pub fn new(email: String) -> Result<Self, EmailAddressError> {
if email.contains('@') {
Ok(Self(email))
} else {
Err(EmailAddressError::MissingAtSign)
}
}
pub fn local_part(&self) -> &str {
self.0.split('@').next().unwrap_or(&self.0)
}
pub fn as_str(&self) -> &str {
&self.0
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_email_address_valid() {
let email = EmailAddress::new("user@example.com".to_string()).unwrap();
assert_eq!(email.as_str(), "user@example.com");
assert_eq!(email.local_part(), "user");
}
#[test]
fn test_email_address_invalid() {
let result = EmailAddress::new("invalid-email".to_string());
assert!(result.is_err());
}
}