nested_validation/
nested_validation.rs

1use 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}