use crate::script::LuaValueExt;
use mlua::{FromLua, Lua, Value};
use simple_fs::SPath;
pub enum DestOptions {
Nil,
Path(SPath),
Custom(OptionsCustom),
}
pub struct OptionsCustom {
pub base_dir: Option<SPath>,
pub file_name: Option<String>,
pub suffix: Option<String>,
pub slim: Option<bool>,
}
impl FromLua for DestOptions {
fn from_lua(value: Value, _lua: &Lua) -> mlua::Result<Self> {
match value {
Value::Nil => Ok(DestOptions::Nil),
Value::String(s) => {
let path_str = s.to_string_lossy();
Ok(DestOptions::Path(SPath::new(path_str)))
}
Value::Table(table) => {
let base_dir = table.x_get_string("base_dir").map(|s| SPath::new(&s));
let file_name = table.x_get_string("file_name");
let suffix = table.x_get_string("suffix");
let slim = table.x_get_bool("slim");
Ok(DestOptions::Custom(OptionsCustom {
base_dir,
file_name,
suffix,
slim,
}))
}
other => Err(mlua::Error::FromLuaConversionError {
from: other.type_name(),
to: "DestOptions".to_string(),
message: Some(
"Destination Options argument can be nil, a string path, or { base_dir?, file_name?, suffix?, slim? }"
.into(),
),
}),
}
}
}