use crate::errors::Result;
use crate::model::validation::Validate;
use error_chain::bail;
pub type Name = String;
#[allow(clippy::module_name_repetitions)]
pub trait HasName {
fn name(&self) -> &Name;
fn alias(&self) -> &Name;
}
impl Validate for Name {
fn validate(&self) -> Result<()> {
if self.parse::<usize>().is_ok() {
bail!(
"Name '{}' cannot be a number, they are reserved for array indexes",
self
);
}
Ok(())
}
}
#[cfg(test)]
#[allow(clippy::unwrap_used, clippy::expect_used)]
mod test {
use crate::model::validation::Validate;
use super::Name;
#[test]
fn validates_when_empty() {
let name = Name::default();
assert!(name.validate().is_ok());
}
#[test]
fn number_does_not_validate() {
let name = Name::from("123");
assert!(name.validate().is_err());
}
#[test]
fn validates_when_has_value() {
let name: Name = Name::from("test");
name.validate().expect("Name did not validate as expected");
}
}