stdlib: Add some functions to getopts to deal with optional arguments more easily
This commit is contained in:
parent
24c9d7e5f8
commit
8c3809afd0
@ -15,6 +15,7 @@ export opt;
|
||||
export reqopt;
|
||||
export optopt;
|
||||
export optflag;
|
||||
export optflagopt;
|
||||
export optmulti;
|
||||
|
||||
export getopts;
|
||||
@ -32,6 +33,7 @@ export opt_present;
|
||||
export opt_str;
|
||||
export opt_strs;
|
||||
export opt_maybe_str;
|
||||
export opt_default;
|
||||
|
||||
tag name { long(str); short(char); }
|
||||
tag hasarg { yes; no; maybe; }
|
||||
@ -55,6 +57,9 @@ fn optopt(str name) -> opt {
|
||||
fn optflag(str name) -> opt {
|
||||
ret rec(name=mkname(name), hasarg=no, occur=optional);
|
||||
}
|
||||
fn optflagopt(str name) -> opt {
|
||||
ret rec(name=mkname(name), hasarg=maybe, occur=optional);
|
||||
}
|
||||
fn optmulti(str name) -> opt {
|
||||
ret rec(name=mkname(name), hasarg=yes, occur=multi);
|
||||
}
|
||||
@ -272,6 +277,18 @@ fn opt_maybe_str(match m, str nm) -> option::t[str] {
|
||||
};
|
||||
}
|
||||
|
||||
/// Returns none if the option was not present, `def` if the option was
|
||||
/// present but no argument was provided, and the argument if the option was
|
||||
/// present and an argument was provided.
|
||||
fn opt_default(match m, str nm, str def) -> option::t[str] {
|
||||
auto vals = opt_vals(m, nm);
|
||||
if (vec::len[optval](vals) == 0u) { ret none[str]; }
|
||||
ret alt (vals.(0)) {
|
||||
case (val(?s)) { some[str](s) }
|
||||
case (_) { some[str](def) }
|
||||
}
|
||||
}
|
||||
|
||||
// Local Variables:
|
||||
// mode: rust;
|
||||
// fill-column: 78;
|
||||
|
Loading…
x
Reference in New Issue
Block a user