use error_chain::bail;
use crate::errors::*;
use crate::model::validation::Validate;
pub type Name = String;
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)]
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");
if name.validate().is_ok() {
panic!();
}
}
#[test]
fn validates_when_has_value() {
let name: Name = Name::from("test");
name.validate().expect("Name did not validate as expected");
}
}