use typeshift::typeshift;
#[typeshift]
struct ValidationShape {
#[validate(length(min = 3, max = 12))]
username: String,
#[validate(range(min = 18, max = 120))]
age: u32,
#[validate(email)]
email: String,
#[validate(url)]
website: String,
#[validate(contains(pattern = "core"))]
slug: String,
#[validate(required)]
backup_email: Option<String>,
}
#[test]
fn validate_attributes_are_reflected_in_schema() {
let schema = typeshift::schema_json::<ValidationShape>();
let props = &schema["properties"];
assert_eq!(props["username"]["minLength"], 3);
assert_eq!(props["username"]["maxLength"], 12);
assert_eq!(props["age"]["minimum"].as_f64(), Some(18.0));
assert_eq!(props["age"]["maximum"].as_f64(), Some(120.0));
assert_eq!(props["email"]["format"], "email");
assert_eq!(props["website"]["format"], "uri");
assert_eq!(props["slug"]["pattern"], "core");
let required = match schema["required"].as_array() {
Some(required) => required,
None => panic!("required must be an array"),
};
assert!(required.iter().any(|name| name == "backup_email"));
}