use std::io::{self, BufRead, Write};
use vasari_core::redact_value;
fn main() {
let arg = std::env::args().nth(1).unwrap_or_else(|| {
eprintln!("usage: scrub_session <session.jsonl | ->");
std::process::exit(2);
});
let reader: Box<dyn BufRead> = if arg == "-" {
Box::new(io::BufReader::new(io::stdin()))
} else {
match std::fs::File::open(&arg) {
Ok(f) => Box::new(io::BufReader::new(f)),
Err(e) => {
eprintln!("scrub_session: cannot open {arg}: {e}");
std::process::exit(1);
}
}
};
let stdout = io::stdout();
let mut out = stdout.lock();
let mut line_no = 0u64;
for line in reader.lines() {
line_no += 1;
let line = match line {
Ok(l) => l,
Err(e) => {
eprintln!("scrub_session: read error on line {line_no}: {e}");
std::process::exit(1);
}
};
let trimmed = line.trim();
if trimmed.is_empty() {
continue;
}
match serde_json::from_str::<serde_json::Value>(trimmed) {
Ok(value) => {
let scrubbed = redact_value(value);
let _ = writeln!(out, "{scrubbed}");
}
Err(e) => {
eprintln!("scrub_session: skipping unparsable line {line_no}: {e}");
}
}
}
}