refactor `has_cdylib` and return `Result<bool, Error>`, use serde renaming

master
Noah Lemen 7 years ago
parent cad30f42ce
commit ee29ab2a76
  1. 20
      src/manifest.rs

@ -26,6 +26,7 @@ struct CargoPackage {
#[derive(Deserialize)] #[derive(Deserialize)]
struct CargoLib { struct CargoLib {
#[serde(rename = "crate-type")]
crate_type: Option<Vec<String>>, crate_type: Option<Vec<String>>,
} }
@ -55,9 +56,7 @@ fn read_cargo_toml(path: &str) -> Result<CargoManifest, Error> {
let mut cargo_contents = String::new(); let mut cargo_contents = String::new();
cargo_file.read_to_string(&mut cargo_contents)?; cargo_file.read_to_string(&mut cargo_contents)?;
Ok(toml::from_str( Ok(toml::from_str(&cargo_contents)?)
&cargo_contents.replace("crate-type", "crate_type"),
)?)
} }
impl CargoManifest { impl CargoManifest {
@ -145,18 +144,15 @@ pub fn get_crate_name(path: &str) -> Result<String, Error> {
Ok(read_cargo_toml(path)?.package.name) Ok(read_cargo_toml(path)?.package.name)
} }
fn has_cdylib(path: &str) -> bool { fn has_cdylib(path: &str) -> Result<bool, Error> {
match read_cargo_toml(path).unwrap().lib { Ok(read_cargo_toml(path)?.lib.map_or(false, |lib| {
Some(lib) => match lib.crate_type { lib.crate_type
Some(types) => types.iter().any(|s| s == "cdylib"), .map_or(false, |types| types.iter().any(|s| s == "cdylib"))
_ => false, }))
},
_ => false,
}
} }
pub fn check_crate_type(path: &str) -> Result<(), Error> { pub fn check_crate_type(path: &str) -> Result<(), Error> {
if !has_cdylib(path) { if !has_cdylib(path)? {
Error::config("crate-type must include cdylib to compile to wasm32-unknown-unknown") Error::config("crate-type must include cdylib to compile to wasm32-unknown-unknown")
} else { } else {
Ok(()) Ok(())

Loading…
Cancel
Save