1use mlua::prelude::*;
2
3macro_rules! to_value {
7 ($lua:expr, $x:expr) => {{
8 use mlua::{prelude::*, LuaSerdeExt};
9 let options = LuaSerializeOptions::new()
10 .serialize_none_to_null(false)
11 .serialize_unit_to_null(false);
12 $lua.to_value_with($x, options)
13 }};
14}
15
16mod constants;
17mod log;
18mod runtime;
19mod session;
20mod utils;
21
22#[mlua::lua_module]
23fn distant_lua(lua: &Lua) -> LuaResult<LuaTable> {
24 let exports = lua.create_table()?;
25
26 exports.set("pending", utils::pending(lua)?)?;
29
30 exports.set("log", log::make_log_tbl(lua)?)?;
32 exports.set("session", session::make_session_tbl(lua)?)?;
33 exports.set("utils", utils::make_utils_tbl(lua)?)?;
34 exports.set("version", make_version_tbl(lua)?)?;
35
36 Ok(exports)
37}
38
39macro_rules! set_nonempty_env {
40 ($tbl:ident, $key:literal, $env_key:literal) => {{
41 let value = env!($env_key);
42 if !value.is_empty() {
43 $tbl.set($key, value)?;
44 }
45 }};
46}
47
48fn make_version_tbl(lua: &Lua) -> LuaResult<LuaTable> {
49 let tbl = lua.create_table()?;
50
51 set_nonempty_env!(tbl, "full", "CARGO_PKG_VERSION");
52 set_nonempty_env!(tbl, "major", "CARGO_PKG_VERSION_MAJOR");
53 set_nonempty_env!(tbl, "minor", "CARGO_PKG_VERSION_MINOR");
54 set_nonempty_env!(tbl, "patch", "CARGO_PKG_VERSION_PATCH");
55 set_nonempty_env!(tbl, "pre", "CARGO_PKG_VERSION_PRE");
56
57 Ok(tbl)
58}