Require version agreement between CLI and dep

One day may be able to relax this but for now its not tenable!

Closes #47
This commit is contained in:
Alex Crichton 2018-03-01 19:32:05 -08:00
parent 1c8061e675
commit 31853ad0ba
3 changed files with 29 additions and 1 deletions

View File

@ -118,6 +118,7 @@ impl Bindgen {
} }
fn extract_programs(module: &mut Module) -> Vec<shared::Program> { fn extract_programs(module: &mut Module) -> Vec<shared::Program> {
let version = shared::version();
let data = module.sections_mut() let data = module.sections_mut()
.iter_mut() .iter_mut()
.filter_map(|s| { .filter_map(|s| {
@ -150,12 +151,37 @@ fn extract_programs(module: &mut Module) -> Vec<shared::Program> {
let json = a.iter() let json = a.iter()
.map(|i| char::from_u32(i.0).unwrap()) .map(|i| char::from_u32(i.0).unwrap())
.collect::<String>(); .collect::<String>();
let p = match serde_json::from_str(&json) { let p: shared::Program = match serde_json::from_str(&json) {
Ok(f) => f, Ok(f) => f,
Err(e) => { Err(e) => {
panic!("failed to decode what looked like wasm-bindgen data: {}", e) panic!("failed to decode what looked like wasm-bindgen data: {}", e)
} }
}; };
if p.version != version {
panic!("
it looks like the Rust project used to create this wasm file was linked against
a different version of wasm-bindgen than this binary:
rust wasm file: {}
this binary: {}
Currently the bindgen format is unstable enough that these two version must
exactly match, so it's required that these two version are kept in sync by
either updating the wasm-bindgen dependency or this binary. You should be able
to update the wasm-bindgen dependency with:
cargo update -p wasm-bindgen
or you can update the binary with
cargo install -f --git https://github.com/alexcrichton/wasm-bindgen
if this warning fails to go away though and you're not sure what to do feel free
to open an issue at https://github.com/alexcrichton/wasm-bindgen/issues!
",
p.version, version);
}
ret.push(p); ret.push(p);
} }
} }

View File

@ -353,6 +353,7 @@ impl Program {
]); ]);
}) })
}), }),
("version", &|a| a.str(&shared::version())),
]); ]);
a.cnt a.cnt
}; };

View File

@ -11,6 +11,7 @@ pub struct Program {
pub enums: Vec<Enum>, pub enums: Vec<Enum>,
pub imports: Vec<Import>, pub imports: Vec<Import>,
pub custom_type_names: Vec<CustomTypeName>, pub custom_type_names: Vec<CustomTypeName>,
pub version: String,
} }
#[derive(Deserialize)] #[derive(Deserialize)]