use std::path::Path;
use anyhow::Result;
use crate::config::Config;
use crate::project::ProjectLayout;
use crate::store::Store;
pub fn run(code: &str, project: &Path) -> Result<()> {
maybe_open_project(project);
let out = crate::scripting::eval(code)?;
if !out.stdout.is_empty() {
print!("{}", out.stdout);
if !out.stdout.ends_with('\n') {
println!();
}
}
match out.top {
Some(value) => println!("{}", crate::scripting::format_value(&value)),
None if out.stdout.is_empty() => println!("(no result)"),
None => {} }
Ok(())
}
fn maybe_open_project(project: &Path) {
let layout = ProjectLayout::new(project);
if layout.require_initialized().is_err() {
return;
}
let cfg = match Config::load(&layout.config_path()) {
Ok(c) => c,
Err(_) => return,
};
let _ = Store::open(layout, &cfg);
}