use adapter::Adapter;
use mlua::prelude::*;
pub struct MLuaAdapter(pub Lua);
impl MLuaAdapter {
pub fn new() -> MLuaAdapter {
MLuaAdapter(Lua::new())
}
pub fn from_lua(lua: Lua) -> MLuaAdapter {
MLuaAdapter(lua)
}
}
impl<'lua, Input, Output, Identifier> Adapter<'lua, Input, Output, Identifier> for MLuaAdapter
where
Input: IntoLuaMulti<'lua>,
Output: FromLuaMulti<'lua>,
Identifier: IntoLua<'lua>, {
type Error = mlua::Error;
fn call(&'lua mut self, identifier: Identifier, input: Input) -> Result<Output, Self::Error> {
let lua = &self.0;
let globals = lua.globals();
let func: mlua::Function = globals.get(identifier)?;
func.call::<Input, Output>(input)
}
}