use valistr::valistr;
#[valistr(r"([A-Z][a-z0-9]*)+")]
struct PascalCaseId;
#[valistr(r"(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})")]
struct Date;
fn main() {
let id = PascalCaseId::new("HelloWorld").unwrap();
assert_eq!(format!("{}", id), "HelloWorld");
assert_eq!(format!("{:?}", id), "\"HelloWorld\"");
assert_eq!(id.as_str(), "HelloWorld");
assert!(PascalCaseId::new("helloWorld").is_none());
assert!(PascalCaseId::try_from("HelloWorld").is_ok());
assert!(PascalCaseId::try_from("hello_world".to_string()).is_err());
let date = Date::new("2023-08-18").unwrap();
assert_eq!(date.get_year().unwrap(), "2023");
assert_eq!(date.get_month().unwrap(), "08");
assert_eq!(date.get_day().unwrap(), "18");
}