#[allow(unused_imports)]
use rhai::plugin::*;
#[export_module]
pub mod dir_functions {
use rhai::{Dynamic, EvalAltResult, ImmutableString, NativeCallContext};
use std::path::PathBuf;
#[rhai_fn(return_raw)]
pub fn create_dir(path: PathBuf) -> Result<(), Box<EvalAltResult>> {
std::fs::create_dir_all(path).map_err(|e| e.to_string().into())
}
#[rhai_fn(return_raw, name = "create_dir")]
pub fn create_dir_str(
ctx: NativeCallContext,
path_raw: ImmutableString,
) -> Result<(), Box<EvalAltResult>> {
let path = ctx.call_native_fn::<PathBuf>("path", (path_raw,))?;
create_dir(path)
}
#[rhai_fn(return_raw)]
pub fn remove_dir(path: PathBuf) -> Result<(), Box<EvalAltResult>> {
std::fs::remove_dir(path).map_err(|e| e.to_string().into())
}
#[rhai_fn(return_raw, name = "remove_dir")]
pub fn remove_dir_str(
ctx: NativeCallContext,
path_raw: ImmutableString,
) -> Result<(), Box<EvalAltResult>> {
let path = ctx.call_native_fn::<PathBuf>("path", (path_raw,))?;
remove_dir(path)
}
#[rhai_fn(return_raw)]
pub fn open_dir(path: PathBuf) -> Result<rhai::Array, Box<EvalAltResult>> {
match std::fs::read_dir(path) {
Ok(read_dir) => Ok(read_dir
.filter_map(|e| e.ok())
.map(|e| Dynamic::from(e.path()))
.collect()),
Err(e) => Err(format!("{}", &e).into()),
}
}
#[rhai_fn(return_raw, name = "open_dir")]
pub fn open_dir_str(
ctx: NativeCallContext,
path_raw: ImmutableString,
) -> Result<rhai::Array, Box<EvalAltResult>> {
let path = ctx.call_native_fn::<PathBuf>("path", (path_raw,))?;
open_dir(path)
}
}