main.rs

 1use mlua::Lua;
 2
 3use runner::*;
 4
 5// pub fn main() -> Result<(), mlua::Error> {
 6//     let source = include_str!("../plugin/cargo_test.lua").to_string();
 7
 8//     let module = LuaPlugin::new(source);
 9//     let mut lua: Lua = Runtime::init(module)?;
10//     let runner: TestRunner = lua.as_interface::<TestRunner>().unwrap();
11
12//     println!("extracted interface: {:#?}", &runner);
13
14//     let contents = runner.run_test(&mut lua, "it_works".into());
15
16//     println!("test results:{}", contents.unwrap());
17
18//     Ok(())
19// }
20
21// pub fn main() -> mlua::Result<()> {
22//     let module = LuaPlugin::new(include_str!("../plugin/cargo_test.lua").to_string());
23//     let mut lua: Lua = Runtime::init(module)?;
24//     let runner = lua.as_interface::<TestRunner>().unwrap();
25//     let test_results = runner.run_test(&mut lua, "it_works".into());
26//     Ok(())
27// }
28
29pub fn main() -> anyhow::Result<()> {
30    let plugin = WasmPlugin {
31        source_bytes: include_bytes!(
32            "../plugin/target/wasm32-unknown-unknown/release/cargo_test.wasm"
33        )
34        .to_vec(),
35        store_data: (),
36    };
37
38    let mut wasm: Wasm<()> = Runtime::init(plugin)?;
39    let banana = wasm.as_interface::<Banana>().unwrap();
40    let result = banana.banana(&mut wasm, 420.69);
41
42    dbg!("{}", result);
43
44    Ok(())
45}
46
47struct Banana {
48    banana: Handle,
49}
50
51impl Interface for Banana {
52    fn from_runtime<T: Runtime>(runtime: &mut T) -> Option<Self> {
53        let banana = runtime.handle_for("banana")?;
54        Some(Banana { banana })
55    }
56}
57
58impl Banana {
59    fn banana<T: Runtime>(&self, runtime: &mut T, number: f64) -> Option<f64> {
60        runtime.call(&self.banana, number).ok()
61    }
62}
63
64#[allow(dead_code)]
65#[derive(Debug)]
66struct TestRunner {
67    pub query: String,
68    run_test: Handle,
69}
70
71impl Interface for TestRunner {
72    fn from_runtime<T: Runtime>(runtime: &mut T) -> Option<Self> {
73        let run_test = runtime.handle_for("run_test")?;
74        let query = runtime.handle_for("query")?;
75        let query: String = runtime.constant(&query).ok()?;
76        Some(TestRunner { query, run_test })
77    }
78}
79
80impl TestRunner {
81    pub fn run_test<T: Runtime>(&self, runtime: &mut T, test_name: String) -> Option<String> {
82        runtime.call(&self.run_test, test_name).ok()
83    }
84}
85
86#[test]
87pub fn it_works() {
88    panic!("huh, that was surprising...");
89}