#![allow(unused_crate_dependencies)]
use bare_types::net::Email;
fn main() {
println!("=== bare-types Email demo ===\n");
let email: Email = "user@example.com".parse().expect("Valid email");
println!("Parsed Email: {}", email);
println!("\nEmail Components:");
println!(" Local part: {}", email.local_part());
println!(" Domain part: {}", email.domain_part());
println!("\nMore Examples:");
let emails = [
"admin@company.com",
"user+tag@example.com",
"support@subdomain.domain.com",
];
for email_str in emails {
match email_str.parse::<Email>() {
Ok(email) => println!(
" ✓ {} -> local: {}, domain: {}",
email_str,
email.local_part(),
email.domain_part()
),
Err(e) => println!(" ✗ {} -> Error: {}", email_str, e),
}
}
println!("\nInvalid Examples:");
let invalid_emails = ["", "invalid", "@example.com", "user@", "user@ example.com"];
for email_str in invalid_emails {
match email_str.parse::<Email>() {
Ok(_) => println!(" ? {} (unexpected success)", email_str),
Err(_) => println!(" ✗ {} -> Invalid (expected)", email_str),
}
}
println!("\nAll types are:");
println!(" - Zero-cost abstractions");
println!(" - Fully no_std compatible");
println!(" - Type-safe with validation at construction");
println!(" - RFC 5322 compliant");
}