summaryrefslogtreecommitdiffstats
path: root/tests/struct.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/struct.rs')
-rw-r--r--tests/struct.rs41
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]);
+}