HI
I'm trying to wrap a component that implments wasi:http/incoming-handler into a different api. The way I'm trying to accomplish this is by having two different components that will be composed with it.
wasi:http/types
interface + some extensions. This will be composed with (2) and (3) and has otherwise no imports (except other wasi interfaces)wasi:http/types
and exports wasi:http/incoming-handler
.wasi:http/types
, wasi:http/incoming-handler
, the extensions from (1) and exports the new api.Problem is that when I try composing the wasm, it errors with
❯ wac plug adapter.wasm --plug types.wasm -o adapter-plugged.wasm
error: encoding produced a component that failed validation
Caused by:
type mismatch for import `wasi:http/incoming-handler@0.2.3`
type mismatch in instance export `incoming-request`
resource types are not the same (ResourceId { globally_unique_id: 2, contextually_unique_id: 8 } vs. ResourceId { globally_unique_id: 2, contextually_unique_id: 57 }) (at offset 0x4e0399)
Can someone help me make sense of this error?
Wits looks as follows:
Component 1:
package poc:types;
interface extensions {
use wasi:http/types@0.2.3.{method, scheme, status-code, incoming-request, response-outparam};
type fields = list<tuple<string, list<u8>>>;
type body = list<u8>;
record body-and-trailers {
body: body,
trailers: option<fields>
}
record request {
method: method,
path-with-query: string,
scheme: scheme,
authority: string,
headers: fields,
body-and-trailers: option<body-and-trailers>
}
record response {
status: status-code,
body: option<body-and-trailers>
}
resource response-outparam-proxy {
constructor();
new-outparam: func() -> response-outparam;
get-response: func() -> response;
}
new-wasi-http-request: func(request: request) -> incoming-request;
}
world api {
export wasi:http/types@0.2.3;
export extensions
Component 2:
package poc:handler;
world api {
import wasi:http/types@0.2.3;
export wasi:http/incoming-handler@0.2.3;
}
Component 3:
package poc:adapter;
interface adapted-api {
use poc:types/extensions.{request, response};
handle: func(request: request) -> response;
}
world api {
import wasi:http/incoming-handler@0.2.3;
import wasi:http/types@0.2.3;
import poc:types/extensions;
export adapted-api;
}
Thank you
Last updated: Jan 24 2025 at 00:11 UTC