pub mod instrumenter;
pub mod parser;
pub mod reporter;
use anyhow::{Context, Result};
use std::fs;
use crate::abi::SustainabilityReport;
use crate::manifest::Manifest;
pub fn generate_all(manifest: &Manifest, output_dir: &str) -> Result<()> {
fs::create_dir_all(output_dir).context("Failed to create output directory")?;
let parsed_functions = parser::parse_function_budgets(&manifest.functions)?;
println!(
" [parse] Validated {} function budget(s)",
parsed_functions.len()
);
let instrumentation_code = instrumenter::generate_instrumentation(manifest, &parsed_functions)?;
let instrumentation_path = format!("{output_dir}/eclexia_instrument.rs");
fs::write(&instrumentation_path, &instrumentation_code)
.with_context(|| format!("Failed to write instrumentation: {instrumentation_path}"))?;
println!(" [instrument] Generated {instrumentation_path}");
let constraints_code = instrumenter::generate_constraints(manifest, &parsed_functions)?;
let constraints_path = format!("{output_dir}/eclexia_constraints.ecl");
fs::write(&constraints_path, &constraints_code)
.with_context(|| format!("Failed to write constraints: {constraints_path}"))?;
println!(" [constraints] Generated {constraints_path}");
let report = reporter::generate_report_template(manifest)?;
let report_path = format!("{output_dir}/sustainability_report");
reporter::write_report(&report, &manifest.report, &report_path)?;
println!(" [report] Generated sustainability report at {report_path}.*");
println!(
" [done] eclexiaiser generation complete for '{}'",
manifest.project.name
);
Ok(())
}
pub fn build(manifest: &Manifest, _release: bool) -> Result<()> {
println!(
"Building eclexiaiser instrumentation for: {}",
manifest.project.name
);
println!(" [note] Full build integration planned for Phase 2");
Ok(())
}
pub fn run(manifest: &Manifest, _args: &[String]) -> Result<()> {
println!(
"Running eclexiaiser workload: {}",
manifest.project.name
);
println!(" [note] Live measurement integration planned for Phase 2");
Ok(())
}
pub fn generate_report_from_simulated(
manifest: &Manifest,
usage_fraction: f64,
) -> Result<SustainabilityReport> {
reporter::generate_simulated_report(manifest, usage_fraction)
}