pub mod budget;
pub mod layout;
pub mod quantize;
pub mod temporal;
use serde::{Deserialize, Serialize};
use crate::analysis::AnalysisResult;
use crate::loader::LoadedData;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum AdviceConfidence {
High,
Medium,
Low,
}
impl std::fmt::Display for AdviceConfidence {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
AdviceConfidence::High => "high",
AdviceConfidence::Medium => "medium",
AdviceConfidence::Low => "low",
})
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Advice {
pub flag: String,
pub value: Option<String>,
pub why: String,
pub projected: Option<String>,
pub lossy: bool,
pub confidence: AdviceConfidence,
}
pub fn run_all(result: &AnalysisResult, data: &LoadedData) -> anyhow::Result<Vec<Advice>> {
let mut advice = Vec::new();
advice.extend(quantize::advise(result, data)?);
advice.extend(temporal::advise(result, data)?);
advice.extend(layout::advise(result, data)?);
advice.extend(budget::advise(result, data)?);
Ok(advice)
}