use std::collections::BTreeMap;
use serde_json::Value;
use crate::loader::SourceTrace;
use super::diagnostic::{AppliedMigration, ConfigWarning};
use super::trace::Explanation;
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct ReportSummary {
pub source_count: usize,
pub validation_count: usize,
pub warning_count: usize,
pub trace_count: usize,
pub secret_path_count: usize,
pub migration_count: usize,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct DoctorReport {
pub format_version: u32,
pub summary: ReportSummary,
pub sources: Vec<SourceTrace>,
pub validations: Vec<String>,
pub warnings: Vec<ConfigWarning>,
pub migrations: Vec<AppliedMigration>,
pub redacted_final: Value,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct TraceAudit {
pub explanation: Explanation,
pub last_source: Option<SourceTrace>,
pub step_count: usize,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct AuditReport {
pub format_version: u32,
pub summary: ReportSummary,
pub doctor: DoctorReport,
pub traces: BTreeMap<String, TraceAudit>,
}
#[cfg(feature = "schema")]
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct ExportBundleReport {
pub format_version: u32,
pub doctor: DoctorReport,
pub audit: AuditReport,
pub env_docs: crate::EnvDocsReport,
pub json_schema: crate::JsonSchemaReport,
pub annotated_json_schema: crate::JsonSchemaReport,
pub example: crate::ConfigExampleReport,
}