feat: log input for debugging purposes

This commit is contained in:
Jeremy Wall 2024-11-30 19:43:22 -05:00
parent ee1b46b835
commit be4e56bba6
4 changed files with 34 additions and 5 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
/target
result/
*.json

9
Cargo.lock generated
View File

@ -193,6 +193,9 @@ name = "bitflags"
version = "2.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
dependencies = [
"serde",
]
[[package]]
name = "block-buffer"
@ -428,6 +431,7 @@ dependencies = [
"mio",
"parking_lot",
"rustix",
"serde",
"signal-hook",
"signal-hook-mio",
"winapi",
@ -1441,9 +1445,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.132"
version = "1.0.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03"
checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377"
dependencies = [
"itoa",
"memchr",
@ -1484,6 +1488,7 @@ dependencies = [
"futures",
"ironcalc",
"ratatui",
"serde_json",
"slice-utils",
"thiserror",
"tui-popup",

View File

@ -8,7 +8,7 @@ edition = "2021"
[dependencies]
anyhow = { version = "1.0.91", features = ["backtrace"] }
clap = { version = "4.5.20", features = ["derive"] }
crossterm = { version = "0.28.1", features = ["event-stream"] }
crossterm = { version = "0.28.1", features = ["event-stream", "serde"] }
csvx = "0.1.17"
ironcalc = { git = "https://github.com/ironcalc/IronCalc" }
futures = "0.3.31"
@ -18,3 +18,4 @@ tui-textarea = "0.7.0"
tui-prompts = "0.5.0"
slice-utils = { git = "https://dev.zaphar.net/zaphar/slice-cursor-rs.git", ref = "main" }
tui-popup = "0.6.0"
serde_json = "1.0.133"

View File

@ -3,6 +3,9 @@ use std::{path::PathBuf, process::ExitCode};
use clap::Parser;
use crossterm::event;
use ratatui;
use serde_json::to_writer;
use std::io::Write;
use ui::Workspace;
mod book;
@ -17,14 +20,33 @@ pub struct Args {
locale_name: String,
#[arg(default_value_t=String::from("America/New_York"), short, long)]
timezone_name: String,
#[arg(long)]
log_input: Option<PathBuf>,
}
type ReadFn = Box<dyn FnMut() -> anyhow::Result<event::Event>>;
fn run(terminal: &mut ratatui::DefaultTerminal, args: Args) -> anyhow::Result<ExitCode> {
let mut ws = Workspace::load(&args.workbook, &args.locale_name, &args.timezone_name)?;
let mut read_func: ReadFn = if let Some(log_path) = args.log_input {
{
let log_file = std::fs::File::create(log_path)?;
Box::new(move || {
let evt = event::read()?;
to_writer(&log_file, &evt)?;
writeln!(&log_file, "")?;
Ok(evt)
})
}
} else {
Box::new(|| {
let evt = event::read()?;
Ok(evt)
})
};
loop {
terminal.draw(|frame| ui::render::draw(frame, &mut ws))?;
if let Some(code) = ws.handle_input(event::read()?)? {
if let Some(code) = ws.handle_input(read_func()?)? {
return Ok(code);
}
}