(&self, interface_id: InterfaceId)
| 73 | } |
| 74 | |
| 75 | fn analyze_interface(&self, interface_id: InterfaceId) -> AnalyzedInterface { |
| 76 | let interface = &self.resolve.interfaces[interface_id]; |
| 77 | let interface_name = interface.name.as_ref().expect("interface missing name"); |
| 78 | |
| 79 | // Analyze methods |
| 80 | let methods = interface |
| 81 | .functions |
| 82 | .values() |
| 83 | .map(|func| self.analyze_interface_method(func, interface_name)) |
| 84 | .collect(); |
| 85 | |
| 86 | // Analyze interface types |
| 87 | let types = interface |
| 88 | .types |
| 89 | .values() |
| 90 | .filter_map(|&id| self.analyze_type(id)) |
| 91 | .collect(); |
| 92 | |
| 93 | // Generate names |
| 94 | let go_interface_name = |
| 95 | GoIdentifier::public(format!("i-{}-{}", self.world.name, interface_name)); |
| 96 | |
| 97 | let wazero_module_name = if let Some(package_id) = interface.package { |
| 98 | let package = &self.resolve.packages[package_id]; |
| 99 | format!( |
| 100 | "{}:{}/{}", |
| 101 | package.name.namespace, package.name.name, interface_name |
| 102 | ) |
| 103 | } else { |
| 104 | interface_name.to_string() |
| 105 | }; |
| 106 | |
| 107 | AnalyzedInterface { |
| 108 | name: interface_name.clone(), |
| 109 | methods, |
| 110 | types, |
| 111 | constructor_param_name: GoIdentifier::private(interface_name), |
| 112 | go_interface_name, |
| 113 | wazero_module_name, |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | fn analyze_interface_method(&self, func: &Function, _interface_name: &str) -> InterfaceMethod { |
| 118 | let parameters = func |
no test coverage detected