diff options
Diffstat (limited to 'tests/struct.rs')
-rw-r--r-- | tests/struct.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/struct.rs b/tests/struct.rs new file mode 100644 index 0000000..415c2dc --- /dev/null +++ b/tests/struct.rs @@ -0,0 +1,41 @@ +mod common; +use common::DummyBackend; + +use interactive_object_builder::*; + +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(DummyBackend).build_value(value_desc)?; + let values = Vec::<u8>::builder(DummyBackend).build_collection(value_desc)?; + + Ok(Configuration { + verbose, + values, + }) + } +} + +#[test] +fn test_struct() { + let c = Configuration::builder(DummyBackend).build_collection("config").unwrap(); + assert!(c.verbose); + assert_eq!(c.values, [42, 42, 42]); +} |