use im::{OrdMap, OrdSet};
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AnalysisState {
pub phase: Phase,
pub files: OrdMap<String, FileAnalysis>,
pub crate_totals: CrateTotals,
pub findings: Vec<Finding>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FileAnalysis {
pub used_external: OrdSet<String>,
pub used_internal_roots: OrdSet<String>, pub external_symbol_counts: OrdMap<String, OrdMap<String, usize>>,
pub internal_symbol_counts: OrdMap<String, OrdMap<String, usize>>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CrateTotals {
pub external_dep_hits: OrdMap<String, usize>, pub internal_root_hits: OrdMap<String, usize>, pub external_head_hits: OrdMap<String, usize>, pub internal_head_hits: OrdMap<String, usize>, pub top_external_symbols: OrdMap<String, Vec<(String, usize)>>, }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Finding {
pub severity: Severity,
pub file: Option<String>,
pub code: String,
pub message: String,
pub hint: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Severity { Info, Warn, Error }
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub enum Phase {
#[default]
Init,
FileViewsBuilt,
TotalsBuilt,
ChecksRun,
Done,
}