Derive Validation Rules
typeinfo works on schema declarations too: each field carries .optional,
.has_default, and .default metadata. A comptime loop can fold these into a
human-readable rule list — the same descriptor that could drive custom validators
or error-message generators downstream.
Iterate typeinfo(SignupForm).fields to generate a rule list showing each field's type, whether it is required or optional, and its default value when present.
06-validation.zolo
// Use case 3 — VALIDATION / PARSING
//
// A `schema` already validates at parse time; here we use `typeinfo` to derive
// a human-readable list of the rules a validator enforces — required vs.
// optional, the declared type, and the default value when present. The same
// descriptor could drive a custom validator or generate error messages.
schema SignupForm {
email: str,
age: int = 18,
nickname: str?,
}
let rules = comptime {
var s = ""
for f in typeinfo(SignupForm).fields {
s = s + "- " + f.name + " (" + f.type.name + "): "
if f.optional { s = s + "optional" } else { s = s + "required" }
if f.has_default { s = s + ", default=" + f.default }
s = s + "\n"
}
s
}
print(rules)
// expected:
// - email (str): required
// - age (int): required, default=18
// - nickname (str?): optional