summaryrefslogtreecommitdiffstats
path: root/src/backend/dialoguer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/dialoguer.rs')
-rw-r--r--src/backend/dialoguer.rs18
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)
+ }
+}