@@ -33,6 +33,7 @@ pub trait StructuredParameters: Sized {
3333 constraints : impl Into < std:: sync:: Arc < str > > ,
3434 ignore_override : bool ,
3535 discard_mismatching_prior_value : bool ,
36+ discriminate : Option < Box < dyn FnOnce ( crate :: AvailableValues < T > ) -> Option < T > > > ,
3637 ) -> core:: result:: Result < Self , crate :: DeclarationError >
3738 where
3839 Self : StructuredParametersMeta < T > ,
@@ -45,6 +46,7 @@ pub trait StructuredParameters: Sized {
4546 constraints,
4647 ignore_override,
4748 discard_mismatching_prior_value,
49+ discriminate,
4850 )
4951 }
5052}
@@ -70,6 +72,7 @@ pub trait StructuredParametersMeta<T>: Sized {
7072 constraints : impl Into < std:: sync:: Arc < str > > ,
7173 ignore_override : bool ,
7274 discard_mismatching_prior_value : bool ,
75+ discriminate : Option < Box < dyn FnOnce ( crate :: AvailableValues < T > ) -> Option < T > > > ,
7376 ) -> core:: result:: Result < Self , crate :: DeclarationError > ;
7477}
7578
@@ -83,7 +86,7 @@ impl NodeState {
8386 where
8487 T : StructuredParameters + StructuredParametersMeta < T0 > ,
8588 {
86- T :: declare_structured ( self , name, None , "" , "" , false , false )
89+ T :: declare_structured ( self , name, None , "" , "" , false , false , None )
8790 }
8891}
8992
@@ -97,6 +100,7 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::Mandator
97100 constraints : impl Into < std:: sync:: Arc < str > > ,
98101 ignore_override : bool ,
99102 discard_mismatching_prior_value : bool ,
103+ discriminate : Option < Box < dyn FnOnce ( crate :: AvailableValues < T > ) -> Option < T > > > ,
100104 ) -> core:: result:: Result < Self , crate :: DeclarationError > {
101105 let builder = node. declare_parameter ( name) ;
102106 let builder = match default {
@@ -111,6 +115,12 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::Mandator
111115 true => builder. discard_mismatching_prior_value ( ) ,
112116 false => builder,
113117 } ;
118+ let builder = match discriminate {
119+ Some ( f) => builder. discriminate ( f) ,
120+ None => builder,
121+ } ;
122+ //builder.range(range)
123+
114124 builder
115125 . description ( description)
116126 . constraints ( constraints)
@@ -127,6 +137,7 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::ReadOnly
127137 constraints : impl Into < std:: sync:: Arc < str > > ,
128138 ignore_override : bool ,
129139 discard_mismatching_prior_value : bool ,
140+ discriminate : Option < Box < dyn FnOnce ( crate :: AvailableValues < T > ) -> Option < T > > > ,
130141 ) -> core:: result:: Result < Self , crate :: DeclarationError > {
131142 let builder = node. declare_parameter ( name) ;
132143 let builder = match default {
@@ -141,6 +152,10 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::ReadOnly
141152 true => builder. discard_mismatching_prior_value ( ) ,
142153 false => builder,
143154 } ;
155+ let builder = match discriminate {
156+ Some ( f) => builder. discriminate ( f) ,
157+ None => builder,
158+ } ;
144159 builder
145160 . description ( description)
146161 . constraints ( constraints)
@@ -157,6 +172,7 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::Optional
157172 constraints : impl Into < std:: sync:: Arc < str > > ,
158173 ignore_override : bool ,
159174 discard_mismatching_prior_value : bool ,
175+ discriminate : Option < Box < dyn FnOnce ( crate :: AvailableValues < T > ) -> Option < T > > > ,
160176 ) -> core:: result:: Result < Self , crate :: DeclarationError > {
161177 let builder = node. declare_parameter ( name) ;
162178 let builder = match default {
@@ -171,9 +187,10 @@ impl<T: crate::ParameterVariant> StructuredParametersMeta<T> for crate::Optional
171187 true => builder. discard_mismatching_prior_value ( ) ,
172188 false => builder,
173189 } ;
174-
175- //builder.discriminate(f)
176- //builder.range(range)
190+ let builder = match discriminate {
191+ Some ( f) => builder. discriminate ( f) ,
192+ None => builder,
193+ } ;
177194
178195 builder
179196 . description ( description)
0 commit comments