diff options
Diffstat (limited to 'src/lua/runtime.rs')
| -rw-r--r-- | src/lua/runtime.rs | 52 |
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(()) +} |