multiversx_sc_meta_lib/
report_info_json.rs1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{code_report_json::CodeReportJson, ei_check_json::EiCheckJson, tools::WasmReport};
6
7#[derive(Serialize, Deserialize)]
8#[serde(rename_all = "camelCase")]
9pub struct ReportInfoJson {
10 #[serde(default)]
11 #[serde(skip_serializing_if = "Vec::is_empty")]
12 pub imports: Vec<String>,
13
14 #[serde(default)]
15 pub is_mem_grow: bool,
16
17 #[serde(default)]
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub ei_check: Option<EiCheckJson>,
20
21 #[serde(default)]
22 #[serde(skip_serializing_if = "HashMap::is_empty")]
23 pub forbidden_opcodes: HashMap<String, Vec<String>>,
24
25 #[serde(default)]
26 pub code_report: CodeReportJson,
27}
28
29impl ReportInfoJson {
30 pub fn new(report: &WasmReport, ei_check_info: Option<EiCheckJson>, size: usize) -> Self {
31 let ei_check = if report.imports.is_empty() {
32 None
33 } else {
34 ei_check_info
35 };
36
37 ReportInfoJson {
38 imports: report.imports.iter().map(|i| i.to_string()).collect(),
39 is_mem_grow: report.memory_grow_flag,
40 ei_check,
41 forbidden_opcodes: report
42 .forbidden_opcodes
43 .iter()
44 .map(|(k, v)| (k.to_string(), v.iter().map(|s| s.to_string()).collect()))
45 .collect(),
46 code_report: CodeReportJson::new(&report.code, size),
47 }
48 }
49}