lune_roblox/
lib.rs

1#![allow(clippy::cargo_common_metadata)]
2
3#[cfg(feature = "mlua")]
4use mlua::prelude::*;
5
6#[cfg(feature = "mlua")]
7use lune_utils::TableBuilder;
8
9pub mod datatypes;
10pub mod document;
11pub mod instance;
12pub mod reflection;
13
14#[cfg(feature = "mlua")]
15pub(crate) mod exports;
16pub(crate) mod shared;
17
18#[cfg(feature = "mlua")]
19use exports::export;
20
21#[cfg(feature = "mlua")]
22fn create_all_exports(lua: Lua) -> LuaResult<Vec<(&'static str, LuaValue)>> {
23    use datatypes::types::*;
24    use instance::Instance;
25    Ok(vec![
26        // Datatypes
27        export::<Axes>(lua.clone())?,
28        export::<BrickColor>(lua.clone())?,
29        export::<CFrame>(lua.clone())?,
30        export::<Color3>(lua.clone())?,
31        export::<ColorSequence>(lua.clone())?,
32        export::<ColorSequenceKeypoint>(lua.clone())?,
33        export::<Content>(lua.clone())?,
34        export::<Faces>(lua.clone())?,
35        export::<Font>(lua.clone())?,
36        export::<NumberRange>(lua.clone())?,
37        export::<NumberSequence>(lua.clone())?,
38        export::<NumberSequenceKeypoint>(lua.clone())?,
39        export::<PhysicalProperties>(lua.clone())?,
40        export::<Ray>(lua.clone())?,
41        export::<Rect>(lua.clone())?,
42        export::<UDim>(lua.clone())?,
43        export::<UDim2>(lua.clone())?,
44        export::<UniqueId>(lua.clone())?,
45        export::<Region3>(lua.clone())?,
46        export::<Region3int16>(lua.clone())?,
47        export::<Vector2>(lua.clone())?,
48        export::<Vector2int16>(lua.clone())?,
49        export::<Vector3>(lua.clone())?,
50        export::<Vector3int16>(lua.clone())?,
51        // Classes
52        export::<Instance>(lua.clone())?,
53        // Singletons
54        ("Enum", Enums.into_lua(&lua)?),
55    ])
56}
57
58/**
59    Creates a table containing all the Roblox datatypes, classes, and singletons.
60
61    Note that this is not guaranteed to contain any value unless indexed directly,
62    it may be optimized to use lazy initialization in the future.
63
64    # Errors
65
66    Errors when out of memory or when a value cannot be created.
67*/
68#[cfg(feature = "mlua")]
69pub fn module(lua: Lua) -> LuaResult<LuaTable> {
70    // FUTURE: We can probably create these lazily as users
71    // index the main exports (this return value) table and
72    // save some memory and startup time. The full exports
73    // table is quite big and probably won't get any smaller
74    // since we impl all roblox constructors for each datatype.
75    let exports = create_all_exports(lua.clone())?;
76    TableBuilder::new(lua)?
77        .with_values(exports)?
78        .build_readonly()
79}