From 12b87b30650bc75e505739cc40d36078b60ace45 Mon Sep 17 00:00:00 2001 From: highflowey Date: Fri, 23 Aug 2024 01:11:41 +0330 Subject: [PATCH] make standardlibrary object safe --- crates/lune-std/src/globals/require/mod.rs | 6 ++-- .../lune-std/src/globals/require/storage.rs | 6 ++++ crates/lune-std/src/library.rs | 31 ++----------------- 3 files changed, 11 insertions(+), 32 deletions(-) create mode 100644 crates/lune-std/src/globals/require/storage.rs diff --git a/crates/lune-std/src/globals/require/mod.rs b/crates/lune-std/src/globals/require/mod.rs index a04382a..c4eee70 100644 --- a/crates/lune-std/src/globals/require/mod.rs +++ b/crates/lune-std/src/globals/require/mod.rs @@ -1,8 +1,8 @@ +use crate::{luaurc::path_to_alias, path::get_parent_path}; +use mlua::prelude::*; use std::path::PathBuf; -use mlua::prelude::*; - -use crate::{luaurc::path_to_alias, path::get_parent_path}; +pub mod storage; pub async fn lua_require(lua: &Lua, path: String) -> LuaResult { let require_path_rel = PathBuf::from(path); diff --git a/crates/lune-std/src/globals/require/storage.rs b/crates/lune-std/src/globals/require/storage.rs new file mode 100644 index 0000000..8c1eda9 --- /dev/null +++ b/crates/lune-std/src/globals/require/storage.rs @@ -0,0 +1,6 @@ +use crate::library::StandardLibrary; +use std::collections::HashMap; + +pub struct RequireStorage<'a> { + stds: HashMap<&'a str, Box>, +} diff --git a/crates/lune-std/src/library.rs b/crates/lune-std/src/library.rs index 5c856b4..96961c0 100644 --- a/crates/lune-std/src/library.rs +++ b/crates/lune-std/src/library.rs @@ -2,12 +2,7 @@ use std::str::FromStr; use mlua::prelude::*; -pub trait StandardLibrary -where - Self: Sized + 'static + FromStr, -{ - const ALL: &'static [Self]; - +pub trait StandardLibrary { fn name(&self) -> &'static str; fn module<'lua>(&self, lua: &'lua Lua) -> LuaResult>; @@ -32,23 +27,6 @@ pub enum LuneStandardLibrary { } impl StandardLibrary for LuneStandardLibrary { - /** - All available standard libraries. - */ - #[rustfmt::skip] - const ALL: &'static [Self] = &[ - #[cfg(feature = "datetime")] Self::DateTime, - #[cfg(feature = "fs")] Self::Fs, - #[cfg(feature = "luau")] Self::Luau, - #[cfg(feature = "net")] Self::Net, - #[cfg(feature = "task")] Self::Task, - #[cfg(feature = "process")] Self::Process, - #[cfg(feature = "regex")] Self::Regex, - #[cfg(feature = "serde")] Self::Serde, - #[cfg(feature = "stdio")] Self::Stdio, - #[cfg(feature = "roblox")] Self::Roblox, - ]; - /** Gets the name of the library, such as `datetime` or `fs`. */ @@ -125,12 +103,7 @@ impl FromStr for LuneStandardLibrary { _ => { return Err(format!( - "Unknown standard library '{low}'\nValid libraries are: {}", - Self::ALL - .iter() - .map(Self::name) - .collect::>() - .join(", ") + "Unknown standard library '{low}'" )) } })