use crate::ValueBuilder; use crate::CollectionBuilder; use crate::Backend; // A value that can be built interactively, using a Backend pub trait BuildableValue: Sized { fn builder(backend: B) -> Box> where E: Sized, B: Backend ; } impl BuildableValue for bool { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.bool_builder() } } impl BuildableValue for u8 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.u8_builder() } } impl BuildableValue for u16 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.u16_builder() } } impl BuildableValue for u32 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.u32_builder() } } impl BuildableValue for u64 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.u64_builder() } } impl BuildableValue for u128 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.u128_builder() } } impl BuildableValue for i8 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.i8_builder() } } impl BuildableValue for i16 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.i16_builder() } } impl BuildableValue for i32 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.i32_builder() } } impl BuildableValue for i64 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.i64_builder() } } impl BuildableValue for i128 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.i128_builder() } } impl BuildableValue for usize { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.usize_builder() } } impl BuildableValue for isize { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.isize_builder() } } impl BuildableValue for f32 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.f32_builder() } } impl BuildableValue for f64 { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.f64_builder() } } impl BuildableValue for char { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.char_builder() } } impl BuildableValue for String { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.string_builder() } } pub trait BuildableCollection { fn builder(backend: B) -> Box> where E: Sized, B: Backend ; } impl BuildableCollection for Vec where T: 'static + BuildableValue { fn builder(backend: B) -> Box> where E: Sized, B: Backend { backend.vec_builder::() } }