use crate::adapters::analyzers::architecture::compiled::compile_architecture;
use crate::adapters::analyzers::architecture::explain::explain_file;
use crate::config::Config;
use std::path::Path;
pub fn handle_explain(target: &Path, config: &Config) -> Result<(), i32> {
let source = match std::fs::read_to_string(target) {
Ok(s) => s,
Err(e) => {
eprintln!("Error reading {}: {e}", target.display());
return Err(1);
}
};
let ast: syn::File = match syn::parse_str(&source) {
Ok(a) => a,
Err(e) => {
eprintln!("Error parsing {}: {e}", target.display());
return Err(1);
}
};
let compiled = match compile_architecture(&config.architecture) {
Ok(c) => c,
Err(e) => {
eprintln!("Error compiling [architecture] config: {e}");
return Err(2);
}
};
let rel = target.to_string_lossy().replace('\\', "/");
let report = explain_file(&rel, &ast, &compiled);
print!("{}", report.render());
Ok(())
}