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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
use super::ModuleManifest;
use crate::ModuleInfoResult;
use crate::ModuleInfoError;
use crate::extract_custom_sections_by_name;
use crate::try_as_one_section;
use wasmer_core::Module as WasmerModule;
use fluence_sdk_main::MANIFEST_SECTION_NAME;
use walrus::ModuleConfig;
use walrus::Module;
use std::borrow::Cow;
use std::path::Path;
use std::convert::TryInto;
pub fn extract_from_path<P>(wasm_module_path: P) -> ModuleInfoResult<Option<ModuleManifest>>
where
P: AsRef<Path>,
{
let module = ModuleConfig::new()
.parse_file(wasm_module_path)
.map_err(ModuleInfoError::CorruptedWasmFile)?;
extract_from_module(&module)
}
pub fn extract_from_module(wasm_module: &Module) -> ModuleInfoResult<Option<ModuleManifest>> {
let sections = extract_custom_sections_by_name(&wasm_module, MANIFEST_SECTION_NAME)?;
if sections.is_empty() {
return Ok(None);
}
let section = try_as_one_section(§ions, MANIFEST_SECTION_NAME)?;
let manifest = match section {
Cow::Borrowed(bytes) => (*bytes).try_into(),
Cow::Owned(vec) => vec.as_slice().try_into(),
}?;
Ok(Some(manifest))
}
pub fn extract_from_wasmer_module(
wasmer_module: &WasmerModule,
) -> ModuleInfoResult<Option<ModuleManifest>> {
let sections = wasmer_module.custom_sections(MANIFEST_SECTION_NAME);
let sections = match sections {
Some(sections) => sections,
None => return Ok(None),
};
let section = try_as_one_section(§ions, MANIFEST_SECTION_NAME)?;
let manifest = section.as_slice().try_into()?;
Ok(Some(manifest))
}