use super::{Error, Fx, Outcome};
use crate::harness_root;
use crate::prompt::inbox::AdvanceLauncher;
use crate::prompt::{self, NanoIdGen, SpawnAdapter, SpawnTool, SystemClock};
use crate::template::RealGit;
use std::path::PathBuf;
#[derive(clap::Args, Debug)]
pub struct Args {
pub repo: PathBuf,
pub message: String,
}
pub fn run(args: Args, fx: &mut Fx) -> Result<Outcome, Error> {
go(args, fx)
.map(Outcome::Line)
.map_err(|e| Error::new("prompt", e))
}
fn go(args: Args, fx: &mut Fx) -> Result<String, Box<dyn std::error::Error>> {
let roots = harness_root::resolve()?;
let tool_executor = SpawnTool::new(&roots.data, &SystemClock, &fx.driver_target);
let launcher = AdvanceLauncher::with_exe(fx.driver_target.clone());
let deps = prompt::Deps {
adapter: &SpawnAdapter,
sleeper: &prompt::RealSleeper,
git: &RealGit::new(),
clock: &SystemClock,
id_gen: &NanoIdGen,
tool_executor: &tool_executor,
config_root: &roots.config,
adapter_target: fx.adapter_target.as_deref(),
stop: fx.stop,
launcher: &launcher,
};
prompt::run(&args.repo, &args.message, &deps).map_err(Into::into)
}