feat(wasm_bindgen): checks wasm-bindgen declaration in Cargo.toml

master
Roberto Huertas 7 years ago
parent 0cab05d6c1
commit 92b18f05bb
  1. 4
      src/command.rs
  2. 11
      src/error.rs
  3. 19
      src/manifest.rs
  4. 1
      tests/fixtures/bad-cargo-toml/Cargo.toml
  5. 10
      tests/manifest/main.rs

@ -169,6 +169,10 @@ fn init(
let crate_path = set_crate_path(path);
info!(&log, "Checking wasm-bindgen dependency...");
manifest::check_wasm_bindgen(&crate_path)?;
info!(&log, "wasm-bindgen dependency is correctly declared.");
info!(&log, "Adding wasm-target...");
build::rustup_add_wasm_target()?;
info!(&log, "Adding wasm-target was successful.");

@ -15,6 +15,8 @@ pub enum Error {
SerdeToml(#[cause] toml::de::Error),
#[fail(display = "{}. stderr:\n\n{}", message, stderr)]
Cli { message: String, stderr: String },
#[fail(display = "{}", message)]
CrateConfig { message: String },
}
impl Error {
@ -25,6 +27,12 @@ impl Error {
})
}
pub fn crate_config(message: &str) -> Result<(), Self> {
Err(Error::CrateConfig {
message: message.to_string(),
})
}
pub fn error_type(&self) -> String {
match self {
Error::Io(_) => "There was an I/O error. Details:\n\n",
@ -34,6 +42,9 @@ impl Error {
message: _,
stderr: _,
} => "There was an error while calling another CLI tool. Details:\n\n",
Error::CrateConfig { message: _ } => {
"There was a crate configuration error. Details:\n\n"
}
}.to_string()
}
}

@ -11,6 +11,7 @@ use PBAR;
#[derive(Deserialize)]
struct CargoManifest {
package: CargoPackage,
dependencies: Option<CargoDependencies>,
}
#[derive(Deserialize)]
@ -23,6 +24,12 @@ struct CargoPackage {
repository: Option<String>,
}
#[derive(Deserialize)]
struct CargoDependencies {
#[serde(rename = "wasm-bindgen")]
wasm_bindgen: Option<String>,
}
#[derive(Serialize)]
struct NpmPackage {
name: String,
@ -136,3 +143,15 @@ pub fn write_package_json(
pub fn get_crate_name(path: &str) -> Result<String, Error> {
Ok(read_cargo_toml(path)?.package.name)
}
pub 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()
}) {
return Ok(());
}
Error::crate_config(&format!(
"Ensure that you have \"{}\" as a dependency in your Cargo.toml file:\n[dependencies]\nwasm-bindgen = \"0.2\"",
style("wasm-bindgen").bold().dim()
))
}

@ -4,4 +4,3 @@ version = "0.1.0"
authors = ["Michael Gattozzi <mgattozzi@gmail.com>"]
[dependencies]
wasm-bindgen = "0.2"

@ -69,3 +69,13 @@ fn it_creates_a_package_json_provided_path_with_scope() {
let pkg = utils::read_package_json(&path).unwrap();
assert_eq!(pkg.name, "@test/scopes-hello-world");
}
#[test]
fn it_errors_when_wasm_bindgen_is_not_declared() {
assert!(manifest::check_wasm_bindgen("tests/fixtures/bad-cargo-toml").is_err());
}
#[test]
fn it_does_not_error_when_wasm_bindgen_is_declared() {
assert!(manifest::check_wasm_bindgen("tests/fixtures/js-hello-world").is_ok());
}

Loading…
Cancel
Save