stdlib: Add some functions to getopts to deal with optional arguments more easily

This commit is contained in:
Patrick Walton 2011-06-01 18:31:09 -07:00
parent 24c9d7e5f8
commit 8c3809afd0

View File

@ -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;