wast_encoder/instances/
mod.rs1use std::{
2 collections::{BTreeMap, BTreeSet},
3 fmt::{Debug, Formatter, Write},
4 ops::AddAssign,
5};
6
7use crate::{
8 dag::DependenciesTrace, helpers::ComponentDefine, DependentGraph, Identifier, WasiFunction, WasiModule, WasiResource,
9 WasiType, WastEncoder,
10};
11
12mod convert;
13mod display;
14
15pub struct WasiInstance {
16 pub module: WasiModule,
17 pub resources: BTreeMap<Identifier, WasiResource>,
19 pub functions: BTreeMap<Identifier, WasiFunction>,
20}
21
22impl WasiInstance {
23 pub fn new<M>(module: M) -> Self
24 where
25 M: Into<WasiModule>,
26 {
27 Self { module: module.into(), resources: Default::default(), functions: Default::default() }
28 }
29 pub fn insert(&mut self, wasi: &WasiType) {
30 match wasi {
31 WasiType::Integer8 { .. } => {}
32 WasiType::Integer16 { .. } => {}
33 WasiType::Integer32 { .. } => {}
34 WasiType::Integer64 { .. } => {}
35 WasiType::Option { .. } => {
36 todo!()
37 }
38 WasiType::Result { .. } => {
39 todo!()
40 }
41 WasiType::Resource(v) => {
42 self.resources.insert(v.symbol.clone(), v.clone());
43 }
44 WasiType::Variant(_) => {
45 todo!()
46 }
47 WasiType::TypeHandler { .. } => {
48 todo!()
49 }
50
51 WasiType::External(v) => {
52 self.functions.insert(v.symbol.clone(), *v.clone());
53 }
54 WasiType::Array { .. } => {}
55 WasiType::Float32 => {}
56 WasiType::Float64 => {}
57 WasiType::Record(_) => {}
58 WasiType::Boolean => {}
59 WasiType::Function(_) => {}
60 }
61 }
62 pub fn dependencies(&self, dict: &DependentGraph) -> BTreeSet<WasiType> {
63 let mut dependencies = BTreeSet::default();
64 let mut types = vec![];
65 self.functions.values().for_each(|f| f.collect_wasi_types(dict, &mut types));
66 for ty in types {
67 match ty.wasm_module() {
68 Some(s) if s.eq(&self.module) => continue,
69 _ => {
70 dependencies.insert(ty.clone());
71 }
72 }
73 }
74 dependencies
75 }
76}