use mlua::prelude::*; use crate::lune::util::TableBuilder; pub mod datatypes; pub mod document; pub mod instance; pub mod reflection; pub(crate) mod exports; pub(crate) mod shared; use exports::export; fn create_all_exports(lua: &Lua) -> LuaResult> { use datatypes::types::*; use instance::Instance; Ok(vec![ // Datatypes export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, export::(lua)?, // Classes export::(lua)?, // Singletons ("Enum", Enums.into_lua(lua)?), ]) } pub fn module(lua: &Lua) -> LuaResult { // FUTURE: We can probably create these lazily as users // index the main exports (this return value) table and // save some memory and startup time. The full exports // table is quite big and probably won't get any smaller // since we impl all roblox constructors for each datatype. let exports = create_all_exports(lua)?; TableBuilder::new(lua)? .with_values(exports)? .build_readonly() }