diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-08-02 00:36:10 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2024-08-02 00:36:10 +0200 |
| commit | fe0938b1de0c46fc2afcaa3dcd6a0f4ec870d21a (patch) | |
| tree | 8db7509894842395cfb309f00c41b7f4d173888c /src/config/evalsto.rs | |
| parent | 1e1eb95926f556e666bc20355327abd24d264858 (diff) | |
add state which is shared with the lua environment
Diffstat (limited to 'src/config/evalsto.rs')
| -rw-r--r-- | src/config/evalsto.rs | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/src/config/evalsto.rs b/src/config/evalsto.rs deleted file mode 100644 index eae9b2d..0000000 --- a/src/config/evalsto.rs +++ /dev/null @@ -1,73 +0,0 @@ -use std::{marker::PhantomData, sync::Arc}; - -use mlua::{FromLua, IntoLua, Lua, Result, Value}; - -use crate::lua::ownedfunction::OwnedFunction; - -#[derive(Clone, Debug)] -pub enum EvalTo<T, A> { - Function(Arc<OwnedFunction>, PhantomData<A>), - Value(T), -} - -impl<T, A> EvalTo<T, A> { - pub fn get<'lua>(&'lua self, args: A, lua: &'lua Lua) -> Result<T> - where - T: FromLua<'lua> + Clone, - A: IntoLua<'lua>, - { - match self { - EvalTo::Function(value, _) => { - let func = value.get(lua); - T::from_lua(func.call(args)?, lua) - } - EvalTo::Value(value) => Ok(value.clone()), - } - } - - pub const fn new(value: T) -> Self { - Self::Value(value) - } -} - -impl<'lua, T, A> FromLua<'lua> for EvalTo<T, A> -where - T: FromLua<'lua> + Clone, - A: IntoLua<'lua>, -{ - fn from_lua( - value: mlua::prelude::LuaValue<'lua>, - lua: &'lua mlua::prelude::Lua, - ) -> Result<Self> { - if value.is_function() { - Ok(Self::Function( - Arc::new(OwnedFunction::new(value, lua)), - PhantomData, - )) - } else { - Ok(Self::Value(T::from_lua(value, lua)?)) - } - } -} - -impl<'lua, T, A> IntoLua<'lua> for EvalTo<T, A> -where - T: FromLua<'lua> + Clone + IntoLua<'lua>, - A: IntoLua<'lua>, -{ - fn into_lua(self, lua: &'lua mlua::prelude::Lua) -> Result<Value<'lua>> { - match self { - EvalTo::Function(value, _) => Ok(value.get(lua).into_lua(lua)?), - EvalTo::Value(value) => value.into_lua(lua), - } - } -} - -impl<T, A> Default for EvalTo<T, A> -where - T: Default, -{ - fn default() -> Self { - Self::Value(T::default()) - } -} |