@@ -145,6 +145,25 @@ impl<'a, 'b> Arg<'a, 'b> {
145
145
let mut a = Arg :: with_name ( name_str) ;
146
146
let arg_settings = y. get ( name_yml) . unwrap ( ) . as_hash ( ) . unwrap ( ) ;
147
147
148
+ macro_rules! vec_or_str {
149
+ ( $v: ident, $a: ident, $c: ident) => { {
150
+ let maybe_vec = $v. as_vec( ) ;
151
+ if let Some ( vec) = maybe_vec {
152
+ for ys in vec {
153
+ if let Some ( s) = ys. as_str( ) {
154
+ $a = $a. $c( s) ;
155
+ }
156
+ }
157
+ } else {
158
+ if let Some ( s) = $v. as_str( ) {
159
+ $a = $a. $c( s) ;
160
+ }
161
+ }
162
+ $a
163
+ }
164
+ } ;
165
+ }
166
+
148
167
for ( k, v) in arg_settings. iter ( ) {
149
168
a = match k. as_str ( ) . unwrap ( ) {
150
169
"short" => a. short ( v. as_str ( ) . unwrap ( ) ) ,
@@ -169,67 +188,28 @@ impl<'a, 'b> Arg<'a, 'b> {
169
188
"display_order" => a. display_order ( v. as_i64 ( ) . unwrap ( ) as usize ) ,
170
189
"default_value" => a. default_value ( v. as_str ( ) . unwrap ( ) ) ,
171
190
"value_names" => {
172
- for ys in v. as_vec ( ) . unwrap ( ) {
173
- if let Some ( s) = ys. as_str ( ) {
174
- a = a. value_name ( s) ;
175
- }
176
- }
177
- a
191
+ vec_or_str ! ( v, a, value_name)
178
192
}
179
193
"groups" => {
180
- for ys in v. as_vec ( ) . unwrap ( ) {
181
- if let Some ( s) = ys. as_str ( ) {
182
- a = a. group ( s) ;
183
- }
184
- }
185
- a
194
+ vec_or_str ! ( v, a, group)
186
195
}
187
196
"requires" => {
188
- for ys in v. as_vec ( ) . unwrap ( ) {
189
- if let Some ( s) = ys. as_str ( ) {
190
- a = a. requires ( s) ;
191
- }
192
- }
193
- a
197
+ vec_or_str ! ( v, a, requires)
194
198
}
195
199
"conflicts_with" => {
196
- for ys in v. as_vec ( ) . unwrap ( ) {
197
- if let Some ( s) = ys. as_str ( ) {
198
- a = a. conflicts_with ( s) ;
199
- }
200
- }
201
- a
200
+ vec_or_str ! ( v, a, conflicts_with)
202
201
}
203
202
"overrides_with" => {
204
- for ys in v. as_vec ( ) . unwrap ( ) {
205
- if let Some ( s) = ys. as_str ( ) {
206
- a = a. overrides_with ( s) ;
207
- }
208
- }
209
- a
203
+ vec_or_str ! ( v, a, overrides_with)
210
204
}
211
205
"possible_values" => {
212
- for ys in v. as_vec ( ) . unwrap ( ) {
213
- if let Some ( s) = ys. as_str ( ) {
214
- a = a. possible_value ( s) ;
215
- }
216
- }
217
- a
206
+ vec_or_str ! ( v, a, possible_value)
218
207
}
219
208
"required_unless_one" => {
220
- for ys in v. as_vec ( ) . unwrap ( ) {
221
- if let Some ( s) = ys. as_str ( ) {
222
- a = a. required_unless ( s) ;
223
- }
224
- }
225
- a
209
+ vec_or_str ! ( v, a, required_unless)
226
210
}
227
211
"required_unless_all" => {
228
- for ys in v. as_vec ( ) . unwrap ( ) {
229
- if let Some ( s) = ys. as_str ( ) {
230
- a = a. required_unless ( s) ;
231
- }
232
- }
212
+ a = vec_or_str ! ( v, a, required_unless) ;
233
213
a. setb ( ArgSettings :: RequiredUnlessAll ) ;
234
214
a
235
215
}
0 commit comments