diff --git a/src/bindgen.rs b/src/bindgen.rs index ed31b86..c41f4ee 100644 --- a/src/bindgen.rs +++ b/src/bindgen.rs @@ -1,24 +1,40 @@ use std::process::Command; +use console::style; +use emoji; +use progressbar; pub fn cargo_install_wasm_bindgen() { + let step = format!( + "{} {}Installing WASM-bindgen...", + style("[6/7]").bold().dim(), + emoji::DOWN_ARROW + ); + let pb = progressbar::new(step); let _output = Command::new("cargo") .arg("install") .arg("--git") .arg("https://github.com/alexcrichton/wasm-bindgen") .output() - .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); - + .unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e)); + pb.finish(); //if !output.status.success() { // let s = String::from_utf8_lossy(&output.stderr); // print!( - // "⛔ cargo_install_wasm_bindgen failed and stderr was:\n{}", + // "{} cargo_install_wasm_bindgen failed and stderr was:\n{}", + // emoji::ERROR, // s // ); // } } pub fn wasm_bindgen_build(path: &str, name: &str) { + let step = format!( + "{} {}Running WASM-bindgen...", + style("[7/7]").bold().dim(), + emoji::RUNNER + ); + let pb = progressbar::new(step); let binary_name = name.replace("-", "_"); let wasm_path = format!("target/wasm32-unknown-unknown/release/{}.wasm", binary_name); let _output = Command::new("wasm-bindgen") @@ -27,11 +43,11 @@ pub fn wasm_bindgen_build(path: &str, name: &str) { .arg("--out-dir") .arg("./pkg") .output() - .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); - + .unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e)); + pb.finish(); //if !output.status.success() { // let s = String::from_utf8_lossy(&output.stderr); - // print!("⛔ wasm_bindgen_build failed and stderr was:\n{}", s); + // print!(" wasm_bindgen_build failed and stderr was:\n{}", emoji::ERROR, s); //} } diff --git a/src/build.rs b/src/build.rs index 23faeb4..527a8c7 100644 --- a/src/build.rs +++ b/src/build.rs @@ -1,21 +1,40 @@ use std::process::Command; +use console::style; +use emoji; +use progressbar; pub fn rustup_add_wasm_target() { + let step = format!( + "{} {}Adding WASM target...", + style("[1/7]").bold().dim(), + emoji::TARGET + ); + let pb = progressbar::new(step); let output = Command::new("rustup") .arg("target") .arg("add") .arg("wasm32-unknown-unknown") .output() - .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); - + .unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e)); + pb.finish(); if !output.status.success() { let s = String::from_utf8_lossy(&output.stderr); - print!("⛔ rustup_add_wasm_target failed and stderr was:\n{}", s); + print!( + "{} rustup_add_wasm_target failed and stderr was:\n{}", + emoji::ERROR, + s + ); } } pub fn cargo_build_wasm(path: &str) { + let step = format!( + "{} {}Compiling to WASM...", + style("[2/7]").bold().dim(), + emoji::CYCLONE + ); + let pb = progressbar::new(step); let output = Command::new("cargo") .current_dir(path) .arg("build") @@ -23,11 +42,15 @@ pub fn cargo_build_wasm(path: &str) { .arg("--target") .arg("wasm32-unknown-unknown") .output() - .unwrap_or_else(|e| panic!("failed to execute process: {}", e)); - + .unwrap_or_else(|e| panic!("{} failed to execute process: {}", emoji::ERROR, e)); + pb.finish(); if !output.status.success() { let s = String::from_utf8_lossy(&output.stderr); - print!("⛔ cargo_build_wasm failed and stderr was:\n{}", s); + print!( + "{} cargo_build_wasm failed and stderr was:\n{}", + emoji::ERROR, + s + ); } } diff --git a/src/emoji.rs b/src/emoji.rs new file mode 100644 index 0000000..f8dc9d3 --- /dev/null +++ b/src/emoji.rs @@ -0,0 +1,13 @@ +use console::Emoji; + +pub static TARGET: Emoji = Emoji("🎯 ", ""); +pub static CYCLONE: Emoji = Emoji("🌀 ", ""); +pub static FOLDER: Emoji = Emoji("📂 ", ""); +pub static MEMO: Emoji = Emoji("📝 ", ""); +pub static DOWN_ARROW: Emoji = Emoji("⬇️ ", ""); +pub static RUNNER: Emoji = Emoji("🏃‍♀️ ", ""); +pub static SPARKLE: Emoji = Emoji("✨ ", ":-)"); +pub static PACKAGE: Emoji = Emoji("📦 ", ":-)"); +pub static WARN: Emoji = Emoji("⚠️ ", ":-)"); +pub static DANCERS: Emoji = Emoji("👯 ", ""); +pub static ERROR: Emoji = Emoji("⛔ ", ""); diff --git a/src/lib.rs b/src/lib.rs index 98fc289..05b78ba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -11,13 +11,22 @@ pub mod bindgen; pub mod readme; pub mod manifest; pub mod progressbar; +pub mod emoji; use std::fs; use failure::Error; +use console::style; pub fn create_pkg_dir(path: &str) -> Result<(), Error> { + let step = format!( + "{} {}Creating a pkg directory...", + style("[3/7]").bold().dim(), + emoji::FOLDER + ); + let pb = progressbar::new(step); let pkg_dir_path = format!("{}/pkg", path); fs::create_dir_all(pkg_dir_path)?; + pb.finish(); Ok(()) } diff --git a/src/main.rs b/src/main.rs index 916d6bd..070d715 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,23 +5,11 @@ extern crate indicatif; extern crate quicli; extern crate wasm_pack; -use wasm_pack::progressbar; - use std::time::Instant; -use console::{style, Emoji}; use indicatif::HumanDuration; use quicli::prelude::*; -use wasm_pack::{bindgen, build, manifest, readme}; - -static TARGET: Emoji = Emoji("🎯 ", ""); -static CYCLONE: Emoji = Emoji("🌀 ", ""); -static FOLDER: Emoji = Emoji("📂 ", ""); -static MEMO: Emoji = Emoji("📝 ", ""); -static DOWN_ARROW: Emoji = Emoji("⬇️ ", ""); -static RUNNER: Emoji = Emoji("🏃‍♀️ ", ""); -static SPARKLE: Emoji = Emoji("✨ ", ":-)"); -static PACKAGE: Emoji = Emoji("📦 ", ":-)"); +use wasm_pack::{bindgen, build, emoji, manifest, readme}; /// 📦 ✨ pack and publish your wasm! #[derive(Debug, StructOpt)] @@ -55,60 +43,23 @@ main!(|args: Cli, log_level: verbosity| match args.cmd { None => ".".to_string(), }; - let step1 = format!( - "{} {}Adding WASM target...", - style("[1/7]").bold().dim(), - TARGET - ); - let pb1 = progressbar::new(step1); build::rustup_add_wasm_target(); - pb1.finish(); - let step2 = format!( - "{} {}Compiling to WASM...", - style("[2/7]").bold().dim(), - CYCLONE - ); - let pb2 = progressbar::new(step2); build::cargo_build_wasm(&crate_path); - pb2.finish(); - let step3 = format!( - "{} {}Creating a pkg directory...", - style("[3/7]").bold().dim(), - FOLDER - ); - let pb3 = progressbar::new(step3); wasm_pack::create_pkg_dir(&crate_path)?; - pb3.finish(); - let step4 = format!( - "{} {}Writing a package.json...", - style("[4/7]").bold().dim(), - MEMO - ); - let pb4 = progressbar::new(step4); manifest::write_package_json(&crate_path)?; - pb4.finish(); readme::copy_from_crate(&crate_path)?; - let step6 = format!( - "{} {}Installing WASM-bindgen...", - style("[6/7]").bold().dim(), - DOWN_ARROW - ); - let pb6 = progressbar::new(step6); bindgen::cargo_install_wasm_bindgen(); - pb6.finish(); let name = manifest::get_crate_name(&crate_path)?; - let step7 = format!( - "{} {}Running WASM-bindgen...", - style("[7/7]").bold().dim(), - RUNNER - ); - let pb7 = progressbar::new(step7); bindgen::wasm_bindgen_build(&crate_path, &name); - pb7.finish(); - println!("{} Done in {}", SPARKLE, HumanDuration(started.elapsed())); + println!( + "{} Done in {}", + emoji::SPARKLE, + HumanDuration(started.elapsed()) + ); println!( "{} Your WASM pkg is ready to publish at {}/pkg", - PACKAGE, &crate_path + emoji::PACKAGE, + &crate_path ) } Command::Pack { .. } => { diff --git a/src/manifest.rs b/src/manifest.rs index a61928c..99d36e1 100644 --- a/src/manifest.rs +++ b/src/manifest.rs @@ -1,9 +1,12 @@ use std::fs::File; use std::io::prelude::*; +use console::style; use failure::Error; use serde_json; use toml; +use emoji; +use progressbar; #[derive(Deserialize)] struct CargoManifest { @@ -66,12 +69,19 @@ impl CargoManifest { /// Generate a package.json file inside in `./pkg`. pub fn write_package_json(path: &str) -> Result<(), Error> { + let step = format!( + "{} {}Writing a package.json...", + style("[4/7]").bold().dim(), + emoji::MEMO + ); + let pb = progressbar::new(step); let pkg_file_path = format!("{}/pkg/package.json", path); let mut pkg_file = File::create(pkg_file_path)?; let crate_data = read_cargo_toml(path)?; let npm_data = crate_data.into_npm(); let npm_json = serde_json::to_string(&npm_data)?; pkg_file.write_all(npm_json.as_bytes())?; + pb.finish(); Ok(()) } diff --git a/src/readme.rs b/src/readme.rs index 07c3770..63bb951 100644 --- a/src/readme.rs +++ b/src/readme.rs @@ -1,25 +1,27 @@ use std::fs; use failure::Error; -use console::{style, Emoji}; +use console::style; use indicatif::MultiProgress; use progressbar; - -static WARN: Emoji = Emoji("⚠️ ", ":-)"); -static DANCERS: Emoji = Emoji("👯 ", ""); +use emoji; pub fn copy_from_crate(path: &str) -> Result<(), Error> { let m = MultiProgress::new(); let step = format!( - "{} {}Copying over your README...", - style("[5/7]").bold().dim(), - DANCERS + "{} {}Copying over your README...", + style("[5/7]").bold().dim(), + emoji::DANCERS ); let pb = m.add(progressbar::new(step)); let crate_readme_path = format!("{}/README.md", path); let new_readme_path = format!("{}/pkg/README.md", path); if let Err(_) = fs::copy(&crate_readme_path, &new_readme_path) { - let warn = format!("{} {}: origin crate has no README", WARN, style("[WARN]").bold().dim()); + let warn = format!( + "{} {}: origin crate has no README", + emoji::WARN, + style("[WARN]").bold().dim() + ); let warn_pb = m.add(progressbar::new(warn)); warn_pb.finish(); };