use super::RuntimeAlpha;
use navm::cmd::Cmd;
impl RuntimeAlpha {
pub(super) fn input_cmd(&mut self, cmd: Cmd) {
use Cmd::*;
match cmd {
SAV { target, path } => self.cmd_sav(target, path),
LOA { target, path } => self.cmd_loa(target, path),
RES { .. } => self.reasoner.reset(),
NSE(narsese) => self.cmd_nse(narsese),
CYC(cycles) => self.reasoner.cycle(cycles),
VOL(volume) => self.cmd_vol(volume),
INF { source } => self.cmd_inf(source),
HLP { name } => self.cmd_hlp(name),
REM { .. } => (),
EXI { reason } => self.cmd_exi(reason),
_ => self.reasoner.report_error(format!("Unknown cmd: {cmd}")),
}
}
fn cmd_nse(&mut self, narsese: narsese::lexical::Task) {
self.reasoner.input_task(narsese)
}
fn cmd_vol(&mut self, volume: usize) {
self.reasoner
.report_info(format!("volume: {} => {volume}", self.reasoner.volume()));
self.reasoner.set_volume(volume);
}
fn cmd_exi(&mut self, reason: String) {
self.reasoner
.report_info(format!("Program exited with reason {reason:?}"));
self.handle_output();
std::process::exit(0);
}
fn report_result(&mut self, result: Result<String, String>) {
match result {
Ok(message) => self.reasoner.report_info(message),
Err(message) => self.reasoner.report_error(message),
}
}
fn cmd_inf(&mut self, source: String) {
let query = source.to_lowercase();
let result = inf_dispatch(&mut self.reasoner, query);
self.report_result(result)
}
fn cmd_hlp(&mut self, name: String) {
let query = name.to_lowercase();
let result = hlp_dispatch(&mut self.reasoner, query);
self.report_result(result)
}
fn cmd_sav(&mut self, target: String, path: String) {
let query = target.to_lowercase();
let result = sav_dispatch(&mut self.reasoner, query, path);
match result {
Ok(output) => self.reasoner.report(output),
Err(message) => self.reasoner.report_error(message),
}
}
fn cmd_loa(&mut self, target: String, data: String) {
let query = target.to_lowercase();
let result = loa_dispatch(&mut self.reasoner, query, data);
self.report_result(result)
}
}
mod cmd_hlp;
use cmd_hlp::*;
mod cmd_inf;
use cmd_inf::*;
mod cmd_sav;
pub use cmd_sav::public::*;
use cmd_sav::*;
mod cmd_loa;
use cmd_loa::*;