|
@@ -0,0 +1,33 @@
|
|
|
|
+use bt::actor_model::host::Host;
|
|
|
|
+use wasmtime::component::*;
|
|
|
|
+use wasmtime::{Config, Engine, Store};
|
|
|
|
+
|
|
|
|
+bindgen!("actor" in "../../wit");
|
|
|
|
+
|
|
|
|
+struct RustHost;
|
|
|
|
+
|
|
|
|
+impl Host for RustHost {
|
|
|
|
+ fn print(&mut self, msg: String) -> wasmtime::Result<()> {
|
|
|
|
+ println!("{}", msg);
|
|
|
|
+ Ok(())
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+fn main() -> wasmtime::Result<()> {
|
|
|
|
+ let mut config = Config::new();
|
|
|
|
+ config.wasm_component_model(true);
|
|
|
|
+ let engine = Engine::new(&config)?;
|
|
|
|
+ let component = Component::from_file(
|
|
|
|
+ &engine,
|
|
|
|
+ "../../target/wasm32-unknown-unknown/debug/example_actor.component.wasm",
|
|
|
|
+ )?;
|
|
|
|
+
|
|
|
|
+ let mut linker = Linker::new(&engine);
|
|
|
|
+ Actor::add_to_linker(&mut linker, |state: &mut RustHost| state)?;
|
|
|
|
+
|
|
|
|
+ let mut store = Store::new(&engine, RustHost);
|
|
|
|
+ let (bindings, _) = Actor::instantiate(&mut store, &component, &linker)?;
|
|
|
|
+
|
|
|
|
+ bindings.call_activate(&mut store)?;
|
|
|
|
+ Ok(())
|
|
|
|
+}
|