#[macro_use]
extern crate serde_derive;
extern crate docopt;
extern crate parity_wasm;
extern crate wasm_bindgen_cli_support;
use std::fs::File;
use std::io::{Write, Read};
use std::path::PathBuf;
use docopt::Docopt;
const USAGE: &'static str = "
Converts a wasm file to an ES6 JS module
Usage:
wasm2es6js [options]
wasm2es6js -h | --help
Options:
-h --help Show this screen.
-o --output FILE File to place output in
--typescript Output a `*.d.ts` file next to the JS output
--base64 Inline the wasm module using base64 encoding
Note that this is not intended to produce a production-ready output module
but rather is intended purely as a temporary \"hack\" until it's standard in
bundlers for working with wasm. Use this program with care!
";
#[derive(Debug, Deserialize)]
struct Args {
flag_output: Option,
flag_typescript: bool,
flag_base64: bool,
arg_input: PathBuf,
}
fn main() {
let args: Args = Docopt::new(USAGE)
.and_then(|d| d.deserialize())
.unwrap_or_else(|e| e.exit());
if !args.flag_base64 {
panic!("unfortunately only works right now with base64");
}
let mut wasm = Vec::new();
File::open(&args.arg_input).expect("failed to open input")
.read_to_end(&mut wasm).expect("failed to read input");
let object = wasm_bindgen_cli_support::wasm2es6js::Config::new()
.base64(args.flag_base64)
.generate(&wasm)
.expect("failed to parse wasm");
if args.flag_typescript {
if let Some(ref p) = args.flag_output {
let dst = p.with_extension("d.ts");
File::create(dst).expect("failed to create output")
.write_all(object.typescript().as_bytes()).expect("failed to write output");
}
}
let js = object.js();
match args.flag_output {
Some(ref p) => {
File::create(p).expect("failed to create output")
.write_all(js.as_bytes()).expect("failed to write output");
}
None => {
println!("{}", js);
}
}
}