@@ -15,6 +15,7 @@ export opt;
15
15
export reqopt;
16
16
export optopt;
17
17
export optflag;
18
+ export optflagopt;
18
19
export optmulti;
19
20
20
21
export getopts;
@@ -32,6 +33,7 @@ export opt_present;
32
33
export opt_str;
33
34
export opt_strs;
34
35
export opt_maybe_str;
36
+ export opt_default;
35
37
36
38
tag name { long( str) ; short ( char) ; }
37
39
tag hasarg { yes; no; maybe; }
@@ -55,6 +57,9 @@ fn optopt(str name) -> opt {
55
57
fn optflag ( str name ) -> opt {
56
58
ret rec ( name=mkname ( name) , hasarg=no, occur=optional) ;
57
59
}
60
+ fn optflagopt ( str name ) -> opt {
61
+ ret rec ( name=mkname ( name) , hasarg=maybe, occur=optional) ;
62
+ }
58
63
fn optmulti ( str name ) -> opt {
59
64
ret rec ( name=mkname ( name) , hasarg=yes, occur=multi) ;
60
65
}
@@ -272,6 +277,18 @@ fn opt_maybe_str(match m, str nm) -> option::t[str] {
272
277
} ;
273
278
}
274
279
280
+ /// Returns none if the option was not present, `def` if the option was
281
+ /// present but no argument was provided, and the argument if the option was
282
+ /// present and an argument was provided.
283
+ fn opt_default( match m, str nm, str def) -> option:: t[ str] {
284
+ auto vals = opt_vals( m, nm) ;
285
+ if ( vec:: len[ optval] ( vals) == 0 u) { ret none[ str] ; }
286
+ ret alt ( vals. ( 0 ) ) {
287
+ case ( val( ?s) ) { some[ str] ( s) }
288
+ case ( _) { some[ str] ( def) }
289
+ }
290
+ }
291
+
275
292
// Local Variables:
276
293
// mode: rust;
277
294
// fill-column: 78;
0 commit comments