use rlua::prelude::*;use std::{    collections::HashMap,    env};pub fn init(lua: &Lua) -> crate::Result<()> {    let module = lua.create_table()?;    module.set("current_dir", lua.create_function( |_, _: ()| {        env::current_dir().map(|path| path.to_str().map(|s| s.to_string())).map_err(LuaError::external)    })? )?;    module.set("current_exe", lua.create_function( |_, _: ()| {        env::current_exe().map(|path| path.to_str().map(|s| s.to_string())).map_err(LuaError::external)    })? )?;    module.set("remove_var", lua.create_function( |_, var: String | {        Ok(env::remove_var(var))    })? )?;    module.set("set_current_dir", lua.create_function( |_, path: String| {        env::set_current_dir(path).map_err(LuaError::external)    })? )?;    module.set("set_var", lua.create_function( |_, (k, v): (String, String)| {        Ok(env::set_var(k, v))    })? )?;    module.set("var", lua.create_function( |_, k: String| {        env::var(k).map_err(LuaError::external)    })? )?;    module.set("vars", lua.create_function( |_, _: ()| {        //We are going to use "vars_os" due to the nature of "vars" when iterating over the list of variable that could result in a panic        let list: HashMap<String, String> = env::vars_os()            .into_iter()            .map(|(k, v)| (k.into_string().unwrap(), v.into_string().unwrap()))            .collect();        Ok(list)    })? )?;    lua.globals().set("env", module)?;    Ok(())}