use crate::wasm_backend::{compile, make_compiling_engine};
const EXPECTED_MODULE_HEADER_PREFIX: &[u8] = b"wasmer-universalWASMER\0\0";
const ENGINE_TYPE_LEN: usize = 16; const METADATA_HEADER_LEN: usize = 16;
fn current_wasmer_module_header() -> Vec<u8> {
const WASM: &[u8] = b"\x00\x61\x73\x6d\x01\x00\x00\x00";
let engine = make_compiling_engine(None);
let module = compile(&engine, WASM).unwrap();
let mut bytes = module.serialize().unwrap_or_default();
bytes.truncate(ENGINE_TYPE_LEN + METADATA_HEADER_LEN);
bytes.into()
}
pub fn current_wasmer_module_version() -> u32 {
let header = current_wasmer_module_header();
if !header.starts_with(EXPECTED_MODULE_HEADER_PREFIX) {
panic!("Wasmer module format changed. Please update the expected version accordingly and bump MODULE_SERIALIZATION_VERSION.");
}
let metadata = &header[header.len() - METADATA_HEADER_LEN..];
u32::from_le_bytes((metadata[8..12]).try_into().unwrap())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn current_wasmer_module_header_works() {
let header = current_wasmer_module_header();
assert!(header.starts_with(EXPECTED_MODULE_HEADER_PREFIX));
}
#[test]
fn current_wasmer_module_version_works() {
let version = current_wasmer_module_version();
assert_eq!(version, 7);
}
}