diff options
Diffstat (limited to 'src/backend/dialoguer.rs')
-rw-r--r-- | src/backend/dialoguer.rs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/backend/dialoguer.rs b/src/backend/dialoguer.rs index ec1f5b8..6b08507 100644 --- a/src/backend/dialoguer.rs +++ b/src/backend/dialoguer.rs @@ -1,6 +1,7 @@ use crate::error::Result; use crate::Backend; use crate::BuildableValue; +use crate::BuildableCollection; use crate::CollectionBuilder; use crate::ValueBuilder; @@ -84,6 +85,12 @@ impl Backend for DialoguerBackend { fn option_builder<T: 'static + BuildableValue>(&self) -> Box<dyn CollectionBuilder<Output = Option<T>>> { Box::new(DialoguerOptionValueBuilder::<T>(std::marker::PhantomData)) } + + fn struct_builder<T>(&self) -> Box<dyn CollectionBuilder<Output = T>> + where T: 'static + BuildableCollection + { + Box::new(DialoguerStructBuilder::<T>(std::marker::PhantomData)) + } } pub struct DialoguerValueBuilder<T: Sized>(std::marker::PhantomData<T>); @@ -144,3 +151,14 @@ impl<T> CollectionBuilder for DialoguerVecBuilder<T> } } + +pub struct DialoguerStructBuilder<T: 'static + BuildableCollection>(std::marker::PhantomData<T>); +impl<T> CollectionBuilder for DialoguerStructBuilder<T> + where T: 'static + BuildableCollection +{ + type Output = T; + + fn build_collection(&self, value_desc: &str) -> Result<Self::Output> { + T::builder(DialoguerBackend).build_collection(value_desc) + } +} |