diff --git a/src/manifest.rs b/src/manifest.rs index a6628c65d..e602db50c 100644 --- a/src/manifest.rs +++ b/src/manifest.rs @@ -1,5 +1,6 @@ //! Reading and writing Cargo.toml and package.json manifests. +use std::collections::HashMap; use std::fs::File; use std::io::prelude::*; @@ -14,7 +15,7 @@ use PBAR; #[derive(Deserialize)] struct CargoManifest { package: CargoPackage, - dependencies: Option, + dependencies: Option>, lib: Option, } @@ -28,10 +29,17 @@ struct CargoPackage { repository: Option, } -#[derive(Deserialize)] -struct CargoDependencies { - #[serde(rename = "wasm-bindgen")] - wasm_bindgen: Option, +#[derive(Deserialize, Debug)] +#[serde(untagged)] +enum CargoDependency { + Simple(String), + Detailed(DetailedCargoDependency), +} + +#[derive(Deserialize, Debug)] +struct DetailedCargoDependency { + version: String, + features: Option>, } #[derive(Deserialize)] @@ -176,9 +184,11 @@ pub fn check_crate_config(path: &str, step: &Step) -> Result<(), Error> { } fn check_wasm_bindgen(path: &str) -> Result<(), Error> { - if read_cargo_toml(path)?.dependencies.map_or(false, |x| { - !x.wasm_bindgen.unwrap_or("".to_string()).is_empty() - }) { + let cargo_toml = read_cargo_toml(path)?; + if cargo_toml + .dependencies + .map_or(false, |deps| deps.contains_key("wasm-bindgen")) + { return Ok(()); } Error::crate_config(&format!(