nested_validation/
nested_validation.rs1use derive_wizard::{BackendError, Wizard};
2
3fn validate_zip(value: &str, _answers: &derive_wizard::Answers) -> Result<(), String> {
4 if value.len() == 5 && value.chars().all(|c| c.is_ascii_digit()) {
5 Ok(())
6 } else {
7 Err("zip must be 5 digits".into())
8 }
9}
10
11#[derive(Debug, Wizard)]
12#[allow(dead_code)]
13struct Address {
14 #[validate("validate_zip")]
15 zip: String,
16}
17
18#[derive(Debug, Wizard)]
19#[allow(dead_code)]
20struct Person {
21 name: String,
22 #[prompt("Address:")]
23 address: Address,
24}
25
26fn main() -> Result<(), BackendError> {
27 println!("Nested validation with requestty backend (enter an invalid zip to see the error):");
28 let person = Person::wizard_builder().build()?;
29 println!("Collected: {:?}", person);
30 Ok(())
31}