wasmtime/runtime/component/bindgen_examples/_4_imported_resources.rs
1bindgen!({
2 inline: r#"
3 package example:imported-resources;
4
5 interface logging {
6 enum level {
7 debug,
8 info,
9 warn,
10 error,
11 }
12
13 resource logger {
14 constructor(max-level: level);
15
16 get-max-level: func() -> level;
17 set-max-level: func(level: level);
18
19 log: func(level: level, msg: string);
20 }
21 }
22
23 world import-some-resources {
24 import logging;
25 }
26 "#,
27
28 with: {
29 // Specify that our host resource is going to point to the `MyLogger`
30 // which is defined just below this macro.
31 "example:imported-resources/logging/logger": MyLogger,
32 },
33
34 // Interactions with `ResourceTable` can possibly trap so enable the ability
35 // to return traps from generated functions.
36 trappable_imports: true,
37});
38
39/// A sample host-defined type which contains arbitrary host-defined data.
40///
41/// In this case this is relatively simple but there's no restrictions on what
42/// this type can hold other than that it must be `'static + Send`.
43pub struct MyLogger {
44 pub max_level: example::imported_resources::logging::Level,
45}