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