diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 158 |
1 files changed, 158 insertions, 0 deletions
@@ -22,6 +22,60 @@ mod dummy_bool_test { fn bool_builder(&self) -> Box<dyn ValueBuilder<Output = bool, Error = Self::Error>> { Box::new(BoolValBuilder) } + fn u8_builder(&self) -> Box<dyn ValueBuilder<Output = u8, Error = Self::Error>> { + unimplemented!() + } + fn u16_builder(&self) -> Box<dyn ValueBuilder<Output = u16, Error = Self::Error>> { + unimplemented!() + } + fn u32_builder(&self) -> Box<dyn ValueBuilder<Output = u32, Error = Self::Error>> { + unimplemented!() + } + fn u64_builder(&self) -> Box<dyn ValueBuilder<Output = u64, Error = Self::Error>> { + unimplemented!() + } + fn u128_builder(&self) -> Box<dyn ValueBuilder<Output = u128, Error = Self::Error>> { + unimplemented!() + } + fn i8_builder(&self) -> Box<dyn ValueBuilder<Output = i8, Error = Self::Error>> { + unimplemented!() + } + fn i16_builder(&self) -> Box<dyn ValueBuilder<Output = i16, Error = Self::Error>> { + unimplemented!() + } + fn i32_builder(&self) -> Box<dyn ValueBuilder<Output = i32, Error = Self::Error>> { + unimplemented!() + } + fn i64_builder(&self) -> Box<dyn ValueBuilder<Output = i64, Error = Self::Error>> { + unimplemented!() + } + fn i128_builder(&self) -> Box<dyn ValueBuilder<Output = i128, Error = Self::Error>> { + unimplemented!() + } + fn usize_builder(&self) -> Box<dyn ValueBuilder<Output = usize, Error = Self::Error>> { + unimplemented!() + } + fn isize_builder(&self) -> Box<dyn ValueBuilder<Output = isize, Error = Self::Error>> { + unimplemented!() + } + fn f32_builder(&self) -> Box<dyn ValueBuilder<Output = f32, Error = Self::Error>> { + unimplemented!() + } + fn f64_builder(&self) -> Box<dyn ValueBuilder<Output = f64, Error = Self::Error>> { + unimplemented!() + } + fn char_builder(&self) -> Box<dyn ValueBuilder<Output = char, Error = Self::Error>> { + unimplemented!() + } + fn string_builder(&self) -> Box<dyn ValueBuilder<Output = String, Error = Self::Error>> { + unimplemented!() + } + + fn vec_builder<T>(&self) -> Box<dyn CollectionBuilder<Output = Vec<T>, Error = Self::Error>> + where T: 'static + BuildableValue + { + unimplemented!() + } } struct BoolValBuilder; @@ -41,3 +95,107 @@ mod dummy_bool_test { } } + +#[cfg(test)] +mod vec_test { + use super::*; + + struct DummyBackend; + impl Backend for DummyBackend { + type Error = (); + + fn bool_builder(&self) -> Box<dyn ValueBuilder<Output = bool, Error = Self::Error>> { + Box::new(BoolValBuilder) + } + fn u8_builder(&self) -> Box<dyn ValueBuilder<Output = u8, Error = Self::Error>> { + unimplemented!() + } + fn u16_builder(&self) -> Box<dyn ValueBuilder<Output = u16, Error = Self::Error>> { + unimplemented!() + } + fn u32_builder(&self) -> Box<dyn ValueBuilder<Output = u32, Error = Self::Error>> { + unimplemented!() + } + fn u64_builder(&self) -> Box<dyn ValueBuilder<Output = u64, Error = Self::Error>> { + unimplemented!() + } + fn u128_builder(&self) -> Box<dyn ValueBuilder<Output = u128, Error = Self::Error>> { + unimplemented!() + } + fn i8_builder(&self) -> Box<dyn ValueBuilder<Output = i8, Error = Self::Error>> { + unimplemented!() + } + fn i16_builder(&self) -> Box<dyn ValueBuilder<Output = i16, Error = Self::Error>> { + unimplemented!() + } + fn i32_builder(&self) -> Box<dyn ValueBuilder<Output = i32, Error = Self::Error>> { + unimplemented!() + } + fn i64_builder(&self) -> Box<dyn ValueBuilder<Output = i64, Error = Self::Error>> { + unimplemented!() + } + fn i128_builder(&self) -> Box<dyn ValueBuilder<Output = i128, Error = Self::Error>> { + unimplemented!() + } + fn usize_builder(&self) -> Box<dyn ValueBuilder<Output = usize, Error = Self::Error>> { + unimplemented!() + } + fn isize_builder(&self) -> Box<dyn ValueBuilder<Output = isize, Error = Self::Error>> { + unimplemented!() + } + fn f32_builder(&self) -> Box<dyn ValueBuilder<Output = f32, Error = Self::Error>> { + unimplemented!() + } + fn f64_builder(&self) -> Box<dyn ValueBuilder<Output = f64, Error = Self::Error>> { + unimplemented!() + } + fn char_builder(&self) -> Box<dyn ValueBuilder<Output = char, Error = Self::Error>> { + unimplemented!() + } + fn string_builder(&self) -> Box<dyn ValueBuilder<Output = String, Error = Self::Error>> { + unimplemented!() + } + fn vec_builder<T>(&self) -> Box<dyn CollectionBuilder<Output = Vec<T>, Error = Self::Error>> + where T: 'static + BuildableValue + { + Box::new(VecBuilder::<T>(std::marker::PhantomData)) + } + } + + struct BoolValBuilder; + impl ValueBuilder for BoolValBuilder { + type Output = bool; + type Error = (); + + fn build_value(&self, _question: &str) -> Result<Self::Output, Self::Error> { + Ok(true) + } + } + + pub struct VecBuilder<T: 'static + BuildableValue>(std::marker::PhantomData<T>); + impl<T: BuildableValue> CollectionBuilder for VecBuilder<T> { + type Output = Vec<T>; + type Error = (); + + fn build_collection(&self, value_desc: &str) -> Result<Self::Output, Self::Error> { + let mut buf = vec![]; + + loop { + let v: T = T::builder(DummyBackend).build_value(value_desc)?; + buf.push(v); + + if buf.len() == 3 { + break + } + } + + Ok(buf) + } + } + + #[test] + fn test_build_vec() { + let v = Vec::<bool>::builder(DummyBackend).build_collection("flag").unwrap(); + assert_eq!(v, vec![true, true, true]); + } +} |