Clean up dynamic option checks

This commit is contained in:
Yehuda Katz 2014-03-20 13:05:52 -07:00
parent c31dc13ac5
commit 521d93a576

View File

@ -81,43 +81,31 @@ fn execute() -> CargoResult<()> {
}
fn normalize(lib: &Option<~[SerializedLibTarget]>, bin: &Option<~[SerializedExecTarget]>) -> (~[LibTarget], ~[ExecTarget]) {
if lib.is_some() && bin.is_some() {
let l = lib.clone().unwrap()[0];
let mut path = l.path.clone();
fn lib_targets(libs: &[SerializedLibTarget]) -> ~[LibTarget] {
let l = &lib[0];
let path = l.path.clone().unwrap_or_else(|| format!("src/{}.rs", l.name));
~[LibTarget{ path: path, name: l.name.clone() }]
}
if path.is_none() {
path = Some(format!("src/{}.rs", l.name));
fn bin_targets(bins: &[SerializedExecTarget], default: |&SerializedExecTarget| -> ~str) -> ~[ExecTarget] {
bins.map(|bin| {
let path = bin.path.clone().unwrap_or_else(|| default(bin));
ExecTarget{ path: path, name: bin.name.clone() }
})
}
match (lib, bin) {
(&Some(ref libs), &Some(ref bins)) => {
(lib_targets(libs.as_slice()), bin_targets(bins.as_slice(), |bin| format!("src/bin/{}.rs", bin.name)))
},
(&Some(ref libs), &None) => {
(lib_targets(libs.as_slice()), ~[])
},
(&None, &Some(ref bins)) => {
(~[], bin_targets(bins.as_slice(), |bin| format!("src/{}.rs", bin.name)))
},
(&None, &None) => {
(~[], ~[])
}
let b = bin.get_ref().map(|b_ref| {
let b = b_ref.clone();
let mut path = b.path.clone();
if path.is_none() {
path = Some(format!("src/bin/{}.rs", b.name.clone()));
}
ExecTarget{ path: path.unwrap(), name: b.name }
});
(~[LibTarget{ path: path.unwrap(), name: l.name }], b)
} else if lib.is_some() {
let l = lib.clone().unwrap()[0];
let mut path = l.path.clone();
if path.is_none() {
path = Some(format!("src/{}.rs", l.name));
}
(~[LibTarget{ path: path.unwrap(), name: l.name }], ~[])
} else if bin.is_some() {
let b = bin.get_ref().map(|b_ref| {
let b = b_ref.clone();
let mut path = b.path.clone();
if path.is_none() {
path = Some(format!("src/{}.rs", b.name.clone()));
}
ExecTarget{ path: path.unwrap(), name: b.name }
});
(~[], b)
} else {
(~[], ~[])
}
}