Skip to content

Commit 742f354

Browse files
committed
std: Convert records to structs in getopts
1 parent fa4fbd5 commit 742f354

File tree

1 file changed

+42
-33
lines changed

1 file changed

+42
-33
lines changed

src/libstd/getopts.rs

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,11 @@ enum HasArg { Yes, No, Maybe, }
8989
enum Occur { Req, Optional, Multi, }
9090

9191
/// A description of a possible option
92-
pub type Opt = {name: Name, hasarg: HasArg, occur: Occur};
92+
pub struct Opt {
93+
name: Name,
94+
hasarg: HasArg,
95+
occur: Occur
96+
}
9397

9498
fn mkname(nm: &str) -> Name {
9599
let unm = str::from_slice(nm);
@@ -143,35 +147,35 @@ impl Opt : Eq {
143147

144148
/// Create an option that is required and takes an argument
145149
pub fn reqopt(name: &str) -> Opt {
146-
return {name: mkname(name), hasarg: Yes, occur: Req};
150+
return Opt {name: mkname(name), hasarg: Yes, occur: Req};
147151
}
148152

149153
/// Create an option that is optional and takes an argument
150154
pub fn optopt(name: &str) -> Opt {
151-
return {name: mkname(name), hasarg: Yes, occur: Optional};
155+
return Opt {name: mkname(name), hasarg: Yes, occur: Optional};
152156
}
153157

154158
/// Create an option that is optional and does not take an argument
155159
pub fn optflag(name: &str) -> Opt {
156-
return {name: mkname(name), hasarg: No, occur: Optional};
160+
return Opt {name: mkname(name), hasarg: No, occur: Optional};
157161
}
158162

159163
/// Create an option that is optional and does not take an argument
160164
pub fn optflagmulti(name: &str) -> Opt {
161-
return {name: mkname(name), hasarg: No, occur: Multi};
165+
return Opt {name: mkname(name), hasarg: No, occur: Multi};
162166
}
163167

164168
/// Create an option that is optional and takes an optional argument
165169
pub fn optflagopt(name: &str) -> Opt {
166-
return {name: mkname(name), hasarg: Maybe, occur: Optional};
170+
return Opt {name: mkname(name), hasarg: Maybe, occur: Optional};
167171
}
168172

169173
/**
170174
* Create an option that is optional, takes an argument, and may occur
171175
* multiple times
172176
*/
173177
pub fn optmulti(name: &str) -> Opt {
174-
return {name: mkname(name), hasarg: Yes, occur: Multi};
178+
return Opt {name: mkname(name), hasarg: Yes, occur: Multi};
175179
}
176180

177181
enum Optval { Val(~str), Given, }
@@ -180,7 +184,11 @@ enum Optval { Val(~str), Given, }
180184
* The result of checking command line arguments. Contains a vector
181185
* of matches and a vector of free strings.
182186
*/
183-
pub type Matches = {opts: ~[Opt], vals: ~[~[Optval]], free: ~[~str]};
187+
pub struct Matches {
188+
opts: ~[Opt],
189+
vals: ~[~[Optval]],
190+
free: ~[~str]
191+
}
184192

185193
impl Optval : Eq {
186194
pure fn eq(&self, other: &Optval) -> bool {
@@ -410,7 +418,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result unsafe {
410418
}
411419
i += 1;
412420
}
413-
return Ok({opts: vec::from_slice(opts),
421+
return Ok(Matches {opts: vec::from_slice(opts),
414422
vals: vec::from_mut(move vals),
415423
free: free});
416424
}
@@ -538,14 +546,14 @@ pub mod groups {
538546
/** one group of options, e.g., both -h and --help, along with
539547
* their shared description and properties
540548
*/
541-
pub type OptGroup = {
549+
pub struct OptGroup {
542550
short_name: ~str,
543551
long_name: ~str,
544552
hint: ~str,
545553
desc: ~str,
546554
hasarg: HasArg,
547555
occur: Occur
548-
};
556+
}
549557

550558
impl OptGroup : Eq {
551559
pure fn eq(&self, other: &OptGroup) -> bool {
@@ -566,7 +574,7 @@ pub mod groups {
566574
desc: &str, hint: &str) -> OptGroup {
567575
let len = short_name.len();
568576
assert len == 1 || len == 0;
569-
return {short_name: str::from_slice(short_name),
577+
return OptGroup { short_name: str::from_slice(short_name),
570578
long_name: str::from_slice(long_name),
571579
hint: str::from_slice(hint),
572580
desc: str::from_slice(desc),
@@ -579,7 +587,7 @@ pub mod groups {
579587
desc: &str, hint: &str) -> OptGroup {
580588
let len = short_name.len();
581589
assert len == 1 || len == 0;
582-
return {short_name: str::from_slice(short_name),
590+
return OptGroup {short_name: str::from_slice(short_name),
583591
long_name: str::from_slice(long_name),
584592
hint: str::from_slice(hint),
585593
desc: str::from_slice(desc),
@@ -592,7 +600,7 @@ pub mod groups {
592600
desc: &str) -> OptGroup {
593601
let len = short_name.len();
594602
assert len == 1 || len == 0;
595-
return {short_name: str::from_slice(short_name),
603+
return OptGroup {short_name: str::from_slice(short_name),
596604
long_name: str::from_slice(long_name),
597605
hint: ~"",
598606
desc: str::from_slice(desc),
@@ -605,7 +613,7 @@ pub mod groups {
605613
desc: &str, hint: &str) -> OptGroup {
606614
let len = short_name.len();
607615
assert len == 1 || len == 0;
608-
return {short_name: str::from_slice(short_name),
616+
return OptGroup {short_name: str::from_slice(short_name),
609617
long_name: str::from_slice(long_name),
610618
hint: str::from_slice(hint),
611619
desc: str::from_slice(desc),
@@ -621,7 +629,7 @@ pub mod groups {
621629
desc: &str, hint: &str) -> OptGroup {
622630
let len = short_name.len();
623631
assert len == 1 || len == 0;
624-
return {short_name: str::from_slice(short_name),
632+
return OptGroup {short_name: str::from_slice(short_name),
625633
long_name: str::from_slice(long_name),
626634
hint: str::from_slice(hint),
627635
desc: str::from_slice(desc),
@@ -637,20 +645,20 @@ pub mod groups {
637645

638646
(0,0) => fail ~"this long-format option was given no name",
639647

640-
(0,_) => ~[{name: Long(((*lopt).long_name)),
641-
hasarg: (*lopt).hasarg,
642-
occur: (*lopt).occur}],
648+
(0,_) => ~[Opt {name: Long(((*lopt).long_name)),
649+
hasarg: (*lopt).hasarg,
650+
occur: (*lopt).occur}],
643651

644-
(1,0) => ~[{name: Short(str::char_at((*lopt).short_name, 0)),
645-
hasarg: (*lopt).hasarg,
646-
occur: (*lopt).occur}],
652+
(1,0) => ~[Opt {name: Short(str::char_at((*lopt).short_name, 0)),
653+
hasarg: (*lopt).hasarg,
654+
occur: (*lopt).occur}],
647655

648-
(1,_) => ~[{name: Short(str::char_at((*lopt).short_name, 0)),
649-
hasarg: (*lopt).hasarg,
650-
occur: (*lopt).occur},
651-
{name: Long(((*lopt).long_name)),
652-
hasarg: (*lopt).hasarg,
653-
occur: (*lopt).occur}],
656+
(1,_) => ~[Opt {name: Short(str::char_at((*lopt).short_name, 0)),
657+
hasarg: (*lopt).hasarg,
658+
occur: (*lopt).occur},
659+
Opt {name: Long(((*lopt).long_name)),
660+
hasarg: (*lopt).hasarg,
661+
occur: (*lopt).occur}],
654662

655663
(_,_) => fail ~"something is wrong with the long-form opt"
656664
}
@@ -725,6 +733,7 @@ mod tests {
725733
#[legacy_exports];
726734
use opt = getopts;
727735
use result::{Err, Ok};
736+
use opt::groups::OptGroup;
728737

729738
fn check_fail_type(f: Fail_, ft: FailType) {
730739
match f {
@@ -1291,7 +1300,7 @@ mod tests {
12911300
#[test]
12921301
fn test_groups_reqopt() {
12931302
let opt = groups::reqopt(~"b", ~"banana", ~"some bananas", ~"VAL");
1294-
assert opt == { short_name: ~"b",
1303+
assert opt == OptGroup { short_name: ~"b",
12951304
long_name: ~"banana",
12961305
hint: ~"VAL",
12971306
desc: ~"some bananas",
@@ -1302,7 +1311,7 @@ mod tests {
13021311
#[test]
13031312
fn test_groups_optopt() {
13041313
let opt = groups::optopt(~"a", ~"apple", ~"some apples", ~"VAL");
1305-
assert opt == { short_name: ~"a",
1314+
assert opt == OptGroup { short_name: ~"a",
13061315
long_name: ~"apple",
13071316
hint: ~"VAL",
13081317
desc: ~"some apples",
@@ -1313,7 +1322,7 @@ mod tests {
13131322
#[test]
13141323
fn test_groups_optflag() {
13151324
let opt = groups::optflag(~"k", ~"kiwi", ~"some kiwis");
1316-
assert opt == { short_name: ~"k",
1325+
assert opt == OptGroup { short_name: ~"k",
13171326
long_name: ~"kiwi",
13181327
hint: ~"",
13191328
desc: ~"some kiwis",
@@ -1325,7 +1334,7 @@ mod tests {
13251334
fn test_groups_optflagopt() {
13261335
let opt = groups::optflagopt(~"p", ~"pineapple",
13271336
~"some pineapples", ~"VAL");
1328-
assert opt == { short_name: ~"p",
1337+
assert opt == OptGroup { short_name: ~"p",
13291338
long_name: ~"pineapple",
13301339
hint: ~"VAL",
13311340
desc: ~"some pineapples",
@@ -1337,7 +1346,7 @@ mod tests {
13371346
fn test_groups_optmulti() {
13381347
let opt = groups::optmulti(~"l", ~"lime",
13391348
~"some limes", ~"VAL");
1340-
assert opt == { short_name: ~"l",
1349+
assert opt == OptGroup { short_name: ~"l",
13411350
long_name: ~"lime",
13421351
hint: ~"VAL",
13431352
desc: ~"some limes",

0 commit comments

Comments
 (0)