use ksl::{eval::eval, init_environment, repl};
fn main() {
let args = std::env::args().collect::<Vec<String>>();
if args.len() == 1 {
repl();
} else if args.len() == 2 {
let param = &args[1];
match param.trim() {
"-h" => cli_helper(),
file_path => {
match std::fs::read_to_string(file_path)
.map(|source| eval(&source, &init_environment()))
{
Ok(Some((result, _))) => println!("{}", result),
_ => {
eprintln!("Failed to evaluate `{}`", file_path);
}
}
}
}
} else {
eprintln!("Invalid args: {:?}", args);
cli_helper();
}
}
fn cli_helper() {
println!("Avaliable argument:");
println!("<file-path>: file to evaluate");
println!("-h: show this message");
}