dotune 0.3.0

A cross-platform dotfile manager configured with Lua
use std::sync::Arc;

use mlua::prelude::*;

use super::dot::Dot;
use super::include::create_include;
use super::input::Input;
use super::mac::Mac;
use super::os::Os;
use super::path::PathFactory;
use super::windows::Windows;
use super::xdg::Xdg;
use crate::model::AbsolutePath;

pub fn script_environment(lua: &Lua, script_path: Arc<AbsolutePath>) -> LuaResult<LuaTable> {
    let environment = lua.create_table()?;

    environment.set("include", create_include(lua, &script_path)?)?;

    environment.set("Dot", Dot::new(lua, script_path.clone())?)?;
    environment.set("Input", Input::new(lua)?)?;

    environment.set("Path", PathFactory { script_path })?;

    environment.set("OS", Os::new(lua)?)?;
    environment.set("Windows", Windows)?;
    environment.set("Mac", Mac)?;
    environment.set("XDG", Xdg)?;

    let env_meta = lua.create_table()?;
    env_meta.set("__index", lua.globals())?;
    env_meta.set("__newindex", lua.globals())?;
    environment.set_metatable(Some(env_meta))?;

    Ok(environment)
}