summaryrefslogtreecommitdiff
path: root/src/lua/runtime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/runtime.rs')
-rw-r--r--src/lua/runtime.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/lua/runtime.rs b/src/lua/runtime.rs
new file mode 100644
index 0000000..dfb37e6
--- /dev/null
+++ b/src/lua/runtime.rs
@@ -0,0 +1,52 @@
+use mlua::{Function, Lua, Result, Table};
+use std::time::{SystemTime, UNIX_EPOCH};
+
+use crate::{
+ config::{self, GlobalConfig},
+ sheet::register::Register,
+};
+
+pub fn neosheet(lua: &Lua) -> Result<()> {
+ let exports = lua.create_table()?;
+
+ exports
+ .set("sheets", lua.create_proxy::<Register>()?)
+ .unwrap();
+ exports
+ .set("config", lua.create_userdata(GlobalConfig::new())?)
+ .unwrap();
+
+ lua.globals()
+ .get::<_, Table>("package")?
+ .get::<_, Table>("loaded")?
+ .set("neosheet", exports)?;
+
+ Ok(())
+}
+
+pub fn math(lua: &Lua) -> Result<()> {
+ let math = lua.globals().get::<_, Table>("math");
+ let randomseed = math.unwrap().get::<_, Function>("randomseed").unwrap();
+
+ let seed = SystemTime::now()
+ .duration_since(UNIX_EPOCH)
+ .unwrap()
+ .as_millis();
+ randomseed.call::<_, ()>(seed).unwrap();
+ Ok(())
+}
+
+pub fn package(lua: &Lua) -> Result<()> {
+ let package = lua.globals().get::<_, Table>("package")?;
+ let path = package.get::<_, String>("path")?;
+ package.set(
+ "path",
+ format!(
+ "{};{}/?.lua;{}/?/init.lua",
+ path,
+ config::constants::USER_CONFIG_DIR.as_str(),
+ config::constants::USER_CONFIG_DIR.as_str()
+ ),
+ )?;
+ Ok(())
+}