use crate::integration::{generate_error_comment, parse_rust_file, parse_rust_file_partial};
use crate::sexp::print_sexp;
use crate::Generator;
use anyhow::Result;
use std::path::PathBuf;
pub fn execute(
input: PathBuf,
output: Option<PathBuf>,
compact: bool,
continue_after_error: bool,
) -> Result<()> {
let source = oxur_cli::common::io::read_input(&input)?;
let output_text = if continue_after_error {
let (crate_node, error_comments) = parse_rust_file_partial(&source)?;
let gen = Generator::new();
let sexp = gen.generate_crate(&crate_node)?;
let sexp_text = print_sexp(&sexp);
let mut output = String::new();
for error in &error_comments {
output.push_str(&generate_error_comment(error));
output.push_str("\n\n");
}
output.push_str(&sexp_text);
output
} else {
let crate_node = parse_rust_file(&source)?;
let gen = Generator::new();
let sexp = gen.generate_crate(&crate_node)?;
if compact {
print_sexp(&sexp)
} else {
print_sexp(&sexp)
}
};
oxur_cli::common::io::write_output(&output_text, output.as_deref())?;
Ok(())
}