summaryrefslogtreecommitdiff
path: root/src/config/evalsto.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/evalsto.rs')
-rw-r--r--src/config/evalsto.rs73
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())
- }
-}