use interactive_object_builder::*; use interactive_object_builder::dialoguer::DialoguerBackend; #[derive(Debug)] pub struct Configuration { verbose: bool, values: Vec, } impl BuildableCollection for Configuration { fn builder(_backend: B) -> Box> where B: Backend { Box::new(ConfigStructBuilder) } } pub struct ConfigStructBuilder; impl CollectionBuilder for ConfigStructBuilder { type Output = Configuration; fn build_collection(&self, value_desc: &str) -> Result { println!("Building {}", value_desc); let verbose = bool::builder(DialoguerBackend).build_value("Be verbose?")?; let values = Vec::::builder(DialoguerBackend).build_collection("List of values")?; Ok(Configuration { verbose, values, }) } } fn main() -> Result<()> { let c = Configuration::builder(DialoguerBackend).build_collection("config")?; dbg!(c); Ok(()) }