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
mod core;
mod dns;
mod headers;
mod ltn12;
mod url;

use mlua::{Error, Lua};

static MODULE_SCRIPT: &str = include_str!("socket.lua");

pub fn preload(lua: &Lua) -> Result<(), Error> {
    // Preload child modules
    dns::preload(lua)?;
    headers::preload(lua)?;
    ltn12::preload(lua)?;
    url::preload(lua)?;

    core::preload(lua)?;

    let script = format!("package.preload['socket'] = function() {} end", MODULE_SCRIPT);
    lua.load(script).exec()?;

    Ok(())
}

#[cfg(test)]
mod tests {
    use mlua::{Lua, Table};
    use std::error::Error;

    #[test]
    fn load() -> Result<(), Box<dyn Error>> {
        let lua = Lua::new();
        crate::preload(&lua)?;
        let _module: Table = lua.load("return require('socket')").eval()?;
        // assert!(module.contains_key("core")?);
        // assert!(module.contains_key("dns")?);
        // assert!(module.contains_key("headers")?);
        // assert!(module.contains_key("ltn12")?);
        // assert!(module.contains_key("url")?);
        Ok(())
    }
}