use std::{os::unix::ffi::OsStrExt, path::PathBuf};
use clap::Parser;
use crate::{Interp, JimObject, JimResult};
#[derive(Parser, Debug)]
#[command(version)]
pub struct Jimsh {
script: Option<PathBuf>,
args: Vec<String>,
}
impl Jimsh {
pub fn run(&self, interp: &Interp) -> JimResult<i32> {
let result = if let Some(path) = &self.script {
interp.set_variable("argv0", path.as_os_str().as_bytes())?;
let argv = JimObject::empty(interp);
for arg in &self.args {
argv.list_append(arg.as_str());
}
interp.set_variable("argv", argv)?;
interp.eval_file(path)
} else {
interp.set_variable("argv", "")?;
interp.interactive_prompt()
};
interp.resolve_exit(result)
}
}