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: 'static + Backend { Box::new(ConfigStructBuilder(backend)) } } pub struct ConfigStructBuilder(B); impl CollectionBuilder for ConfigStructBuilder { type Output = Configuration; fn build_collection(&self, value_desc: &str) -> Result { println!("Building {}", value_desc); let verbose = bool::builder(self.0).build_value("Be verbose?")?; let values = Vec::::builder(self.0).build_collection("List of values")?; Ok(Configuration { verbose, values, }) } } fn main() -> Result<()> { let c = Configuration::builder(DialoguerBackend).build_collection("config")?; dbg!(c); Ok(()) }