pub(crate) fn truncate_list(items: &[String], max: usize) -> String {
if items.len() <= max {
items.join(", ")
} else {
let head = items[..max].join(", ");
let rest = items.len() - max;
format!("{head}, …and {rest} more")
}
}
pub(crate) fn is_valid_email_format(email: &str) -> bool {
if email.contains(' ') || email.is_empty() {
return false;
}
let parts: Vec<&str> = email.split('@').collect();
if parts.len() != 2 {
return false;
}
let local = parts[0];
let domain = parts[1];
if local.is_empty() {
return false;
}
if domain.is_empty()
|| !domain.contains('.')
|| domain.starts_with('.')
|| domain.ends_with('.')
{
return false;
}
true
}