use std::{io::ErrorKind, path::PathBuf};
use clap::Parser;
use wasmer_wasix::journal::{JournalEntry, LogFileJournal, WritableJournal};
use crate::commands::CliCommand;
#[derive(Debug, Parser)]
pub struct CmdJournalImport {
#[clap(index = 1)]
journal_path: PathBuf,
}
impl CliCommand for CmdJournalImport {
type Output = ();
fn run(self) -> Result<(), anyhow::Error> {
if self.journal_path.exists() {
std::fs::remove_file(&self.journal_path)?;
}
let journal = LogFileJournal::new(self.journal_path)?;
let stdin = std::io::stdin();
let mut lines = String::new();
let mut line = String::new();
loop {
loop {
line.clear();
match stdin.read_line(&mut line) {
Ok(0) => return Ok(()),
Ok(_) => {
lines.push_str(&line);
if line.trim_end() == "}" {
break;
}
}
Err(err) if err.kind() == ErrorKind::UnexpectedEof => return Ok(()),
Err(err) => return Err(err.into()),
}
}
let record = serde_json::from_str::<JournalEntry<'static>>(&lines)?;
println!("{record}");
journal.write(record)?;
lines.clear();
}
}
}