1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
use mlua::{Function, Lua, Result, Table};
use std::time::{SystemTime, UNIX_EPOCH};
use crate::{
config::{self, GlobalConfig},
sheet::register::Register, state::GlobalState,
};
pub fn neosheet(lua: &Lua) -> Result<()> {
let exports = lua.create_table()?;
exports
.set("sheets", lua.create_userdata(Register)?)
.unwrap();
exports
.set("config", lua.create_userdata(GlobalConfig::default())?)
.unwrap();
exports
.set("state", lua.create_userdata(GlobalState::default())?)
.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;{};./?.lua",
config::constants::USER_CONFIG_DIR.as_str(),
config::constants::USER_CONFIG_DIR.as_str(),
path.split(';').filter(|s| s.starts_with('/')).collect::<Vec<&str>>().join(";"),
),
)?;
Ok(())
}
|