From 8293b6971d238bab8320546a13f60a49d407016c Mon Sep 17 00:00:00 2001 From: Isaac Clayton Date: Wed, 1 Jun 2022 11:15:06 +0200 Subject: [PATCH] Start sketching out runner runtime --- Cargo.lock | 41 ++++++++++++++++++++++++++++++++++++ crates/runner/Cargo.toml | 7 ++++++ crates/runner/src/lib.rs | 37 ++++++++++++++++++++++++++++++++ crates/runner/src/main.rs | 7 ++++++ crates/runner/src/runtime.rs | 22 +++++++++++++++++++ 5 files changed, 114 insertions(+) create mode 100644 crates/runner/Cargo.toml create mode 100644 crates/runner/src/lib.rs create mode 100644 crates/runner/src/main.rs create mode 100644 crates/runner/src/runtime.rs diff --git a/Cargo.lock b/Cargo.lock index 8624921d97..442e10c60a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2627,6 +2627,24 @@ dependencies = [ "url", ] +[[package]] +name = "lua-src" +version = "544.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "708ba3c844d5e9d38def4a09dd871c17c370f519b3c4b7261fbabe4a613a814c" +dependencies = [ + "cc", +] + +[[package]] +name = "luajit-src" +version = "210.3.4+resty073ac54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "640b09e99575a442b4da0ef406a78188a1a4313bb9ead7b5b20ec12cc480130f" +dependencies = [ + "cc", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -2845,6 +2863,22 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "mlua" +version = "0.8.0-beta.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bb054c5769e1aeb137554b95941e997b62d17f5265bef213cb63179d75a6bf6" +dependencies = [ + "bstr", + "cc", + "lua-src", + "luajit-src", + "num-traits", + "once_cell", + "pkg-config", + "rustc-hash", +] + [[package]] name = "multimap" version = "0.8.3" @@ -3971,6 +4005,13 @@ dependencies = [ "zeroize", ] +[[package]] +name = "runner" +version = "0.1.0" +dependencies = [ + "mlua", +] + [[package]] name = "rust-embed" version = "6.4.0" diff --git a/crates/runner/Cargo.toml b/crates/runner/Cargo.toml new file mode 100644 index 0000000000..fe49be4bc9 --- /dev/null +++ b/crates/runner/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "runner" +version = "0.1.0" +edition = "2021" + +[dependencies] +mlua = { version = "0.8.0-beta.5", features = ["lua54", "vendored"] } diff --git a/crates/runner/src/lib.rs b/crates/runner/src/lib.rs new file mode 100644 index 0000000000..802755c961 --- /dev/null +++ b/crates/runner/src/lib.rs @@ -0,0 +1,37 @@ +use mlua::{Error, FromLua, Lua, ToLua, UserData}; + +pub mod runtime; +pub use runtime::*; + +impl Runtime for Lua { + type Module = String; + // type Error = Error; + type Interface = LuaInterface; + + fn init(module: Self::Module) -> Option { + let lua = Lua::new(); + lua.load(&module).exec().ok()?; + return Some(lua); + } + + fn interface(&self) -> Self::Interface { + todo!() + } + + fn val<'lua, K: ToLua<'lua>, V: FromLua<'lua>>(&'lua self, key: K) -> Option { + self.globals().get(key).ok() + } +} + +pub struct LuaInterface { + funs: Vec, + vals: Vec, +} + +impl Interface for LuaInterface { + type Handle = String; + + fn handles(&self) -> &[Self::Handle] { + todo!() + } +} diff --git a/crates/runner/src/main.rs b/crates/runner/src/main.rs new file mode 100644 index 0000000000..d9ad57ecae --- /dev/null +++ b/crates/runner/src/main.rs @@ -0,0 +1,7 @@ +use mlua::{Lua, Result}; + +use runner::*; + +pub fn main() { + let lua: Lua = Runtime::init("x = 7".to_string()).unwrap(); +} diff --git a/crates/runner/src/runtime.rs b/crates/runner/src/runtime.rs new file mode 100644 index 0000000000..921c274719 --- /dev/null +++ b/crates/runner/src/runtime.rs @@ -0,0 +1,22 @@ +use mlua::{FromLua, ToLua}; + +pub trait FromRuntime: Sized { + fn from_runtime() -> Option; +} + +pub trait Interface { + type Handle; + fn handles(&self) -> &[Self::Handle]; +} + +pub trait Runtime +where + Self: Sized, +{ + type Module; + type Interface: Interface; + + fn init(plugin: Self::Module) -> Option; + fn interface(&self) -> Self::Interface; + fn val<'lua, K: ToLua<'lua>, V: FromLua<'lua>>(&'lua self, key: K) -> Option; +}