diff options
Diffstat (limited to 'examples/config.rs')
-rw-r--r-- | examples/config.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/examples/config.rs b/examples/config.rs new file mode 100644 index 0000000..a91aaee --- /dev/null +++ b/examples/config.rs @@ -0,0 +1,40 @@ +use interactive_object_builder::*; +use interactive_object_builder::dialoguer::DialoguerBackend; + +#[derive(Debug)] +pub struct Configuration { + verbose: bool, + values: Vec<u8>, +} + +impl BuildableCollection for Configuration { + fn builder<B>(_backend: B) -> Box<dyn CollectionBuilder<Output = Self>> + where B: Backend + { + Box::new(ConfigStructBuilder) + } +} + +pub struct ConfigStructBuilder; +impl CollectionBuilder for ConfigStructBuilder { + type Output = Configuration; + + fn build_collection(&self, value_desc: &str) -> Result<Self::Output> { + println!("Building {}", value_desc); + + let verbose = bool::builder(DialoguerBackend).build_value("Be verbose?")?; + let values = Vec::<u8>::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(()) +} + |