1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use anyhow::Result;
#[cfg(feature = "vm-wasmer")]
use wasmer::Module;
#[cfg(feature = "vm-wasmtime")]
use wasmtime::Module;
use crate::linker::engine;
use normalisation::patch;
pub mod normalisation;
#[derive(Clone)]
pub struct LunaticModule {
module: Module,
min_memory: u32,
max_memory: Option<u32>,
}
impl LunaticModule {
pub fn new(wasm: &[u8]) -> Result<Self> {
let ((min_memory, max_memory), wasm) = patch(&wasm)?;
let engine = engine();
let module = Module::new(&engine, wasm)?;
Ok(Self {
module,
min_memory,
max_memory,
})
}
pub fn module(&self) -> &Module {
&self.module
}
pub fn min_memory(&self) -> u32 {
self.min_memory
}
pub fn max_memory(&self) -> Option<u32> {
self.max_memory
}
}