From 6918e3e7ec0df5e8631ffbb71b00e26ac60bc1f1 Mon Sep 17 00:00:00 2001 From: Daniel Vigovszky Date: Thu, 22 Feb 2024 17:27:56 +0100 Subject: [PATCH] Fixes --- wasm-rpc-stubgen/src/rust.rs | 31 +++++++++++++++++++++++++------ wasm-rpc-stubgen/src/stub.rs | 6 +++++- wasm-rpc/src/wasmtime.rs | 2 +- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/wasm-rpc-stubgen/src/rust.rs b/wasm-rpc-stubgen/src/rust.rs index b111461..486e4bd 100644 --- a/wasm-rpc-stubgen/src/rust.rs +++ b/wasm-rpc-stubgen/src/rust.rs @@ -85,7 +85,10 @@ pub fn generate_stub_source(def: &StubDefinition) -> anyhow::Result<()> { if interface.global { None } else { - Some(&interface.name) + match &interface.owner_interface { + Some(owner) => Some(format!("{owner}/{}", &interface.name)), + None => Some(interface.name.clone()), + } }, if interface.is_resource() { FunctionMode::Method @@ -102,7 +105,10 @@ pub fn generate_stub_source(def: &StubDefinition) -> anyhow::Result<()> { if interface.global { None } else { - Some(&interface.name) + match &interface.owner_interface { + Some(owner) => Some(format!("{owner}/{}", &interface.name)), + None => Some(interface.name.clone()), + } }, FunctionMode::Static, )?); @@ -123,7 +129,11 @@ pub fn generate_stub_source(def: &StubDefinition) -> anyhow::Result<()> { generate_function_stub_source( def, &constructor_stub, - Some(&interface.name), + Some(format!( + "{}/{}", + interface.owner_interface.clone().unwrap_or_default(), + &interface.name + )), FunctionMode::Constructor, )? } else { @@ -146,7 +156,15 @@ pub fn generate_stub_source(def: &StubDefinition) -> anyhow::Result<()> { }); if interface.is_resource() { - let remote_function_name = get_remote_function_name(def, "drop", Some(&interface.name)); + let remote_function_name = get_remote_function_name( + def, + "drop", + Some(&format!( + "{}/{}", + interface.owner_interface.clone().unwrap_or_default(), + &interface.name + )), + ); interface_impls.push(quote! { impl Drop for #interface_name { fn drop(&mut self) { @@ -198,7 +216,7 @@ enum FunctionMode { fn generate_function_stub_source( def: &StubDefinition, function: &FunctionStub, - interface_name: Option<&String>, + interface_name: Option, mode: FunctionMode, ) -> anyhow::Result { let function_name = Ident::new(&to_rust_ident(&function.name), Span::call_site()); @@ -301,7 +319,8 @@ fn generate_function_stub_source( } } - let remote_function_name = get_remote_function_name(def, &function.name, interface_name); + let remote_function_name = + get_remote_function_name(def, &function.name, interface_name.as_ref()); let rpc = match mode { FunctionMode::Static => { diff --git a/wasm-rpc-stubgen/src/stub.rs b/wasm-rpc-stubgen/src/stub.rs index aed89ac..e47bb6e 100644 --- a/wasm-rpc-stubgen/src/stub.rs +++ b/wasm-rpc-stubgen/src/stub.rs @@ -129,6 +129,7 @@ pub struct InterfaceStub { pub static_functions: Vec, pub imports: Vec, pub global: bool, + pub owner_interface: Option, } impl InterfaceStub { @@ -302,6 +303,7 @@ fn collect_stub_interfaces(resolve: &Resolve, world: &World) -> anyhow::Result anyhow::Result( .clone(); interfaces.push(InterfaceStub { - name: format!("{owner_interface}/{resource_name}"), + name: resource_name, functions, imports, global: false, constructor_params, static_functions, + owner_interface: Some(owner_interface.to_string()), }); } TypeOwner::None => {} diff --git a/wasm-rpc/src/wasmtime.rs b/wasm-rpc/src/wasmtime.rs index 02ae92d..6dcdd3b 100644 --- a/wasm-rpc/src/wasmtime.rs +++ b/wasm-rpc/src/wasmtime.rs @@ -376,7 +376,7 @@ pub fn encode_output( Ok(Value::Flags(encoded_value)) } Val::Resource(resource) => { - let id = resource_store.add(resource.clone()); + let id = resource_store.add(*resource); Ok(Value::Handle { uri: resource_store.self_uri(), resource_id: id,