use rlua::{Lua, Context, Error}; use crate::maps::init_lua; use crate::types::{Bind, Action, Handler}; use crate::config::Config; use std::default::Default; pub fn load_config(lua_config: &str) -> Result { let lua = Lua::new(); let bind: Result<_, Error> = lua.context(|c: Context| { init_lua(c)?; let g = c.globals(); let mut config = Config::default(); c.scope::<_, Result<_, Error>>(|scope| { g.set("sync", scope.create_function_mut(|_: Context, args: (Bind, Bind, Option)| { println!("config -> sync({:?}, {:?}, {:?})", args.0, args.1, args.2); config .binds .insert(args.0, Handler { action: Action::Sync(args.1), passthrough: args.2.unwrap_or(false), }); Ok(()) })?)?; c.load(lua_config).exec()?; Ok(()) })?; Ok(config) }); Ok(bind?) }