wasmtime/runtime/component/bindgen_examples/
_7_async.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    // NEW: Make all imports/exports `async` by default, and additionally
29    // interactions with `ResourceTable` can possibly trap so enable the ability
30    // to return traps from generated functions with `trappable`.
31    imports: { default: async | trappable },
32    exports: { default: async },
33
34    with: {
35        // Specify that our host resource is going to point to the `MyLogger`
36        // which is defined just below this macro.
37        "example:imported-resources/logging/logger": MyLogger,
38    },
39});
40
41/// A sample host-defined type which contains arbitrary host-defined data.
42///
43/// In this case this is relatively simple but there's no restrictions on what
44/// this type can hold other than that it must be `'static + Send`.
45pub struct MyLogger {
46    pub max_level: example::imported_resources::logging::Level,
47}