use std::collections::BTreeMap;
use serde::Serialize;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(transparent)]
pub struct SchemaVersion(pub u32);
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(transparent)]
pub struct ToolVersion(pub String);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(transparent)]
pub struct ElapsedMs(pub u64);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(transparent)]
pub struct AuditIntroduced(pub bool);
#[derive(Debug, Clone, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct EntryPoints {
pub total: usize,
pub sources: BTreeMap<String, usize>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct CheckSummary {
pub total_issues: usize,
pub unused_files: usize,
pub unused_exports: usize,
pub unused_types: usize,
pub private_type_leaks: usize,
pub unused_dependencies: usize,
pub unused_enum_members: usize,
pub unused_class_members: usize,
pub unresolved_imports: usize,
pub unlisted_dependencies: usize,
pub duplicate_exports: usize,
pub type_only_dependencies: usize,
pub test_only_dependencies: usize,
pub circular_dependencies: usize,
#[serde(default)]
pub re_export_cycles: usize,
pub boundary_violations: usize,
pub stale_suppressions: usize,
pub unused_catalog_entries: usize,
pub empty_catalog_groups: usize,
pub unresolved_catalog_references: usize,
pub unused_dependency_overrides: usize,
pub misconfigured_dependency_overrides: usize,
}
#[derive(Debug, Clone, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct BaselineDeltas {
pub total_delta: i64,
pub per_category: BTreeMap<String, BaselineCategoryDelta>,
}
#[derive(Debug, Clone, Copy, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct BaselineCategoryDelta {
pub current: usize,
pub baseline: usize,
pub delta: i64,
}
#[derive(Debug, Clone, Copy, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct BaselineMatch {
pub entries: usize,
pub matched: usize,
}
#[derive(Debug, Clone, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct RegressionResult {
pub status: RegressionStatus,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub baseline_total: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub current_total: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub delta: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tolerance: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub tolerance_kind: Option<RegressionToleranceKind>,
pub exceeded: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "lowercase")]
pub enum RegressionStatus {
Pass,
Exceeded,
Skipped,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "lowercase")]
pub enum RegressionToleranceKind {
Absolute,
Percentage,
}
#[derive(Debug, Clone, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct Meta {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub docs: Option<String>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub metrics: BTreeMap<String, MetaMetric>,
#[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
pub rules: BTreeMap<String, MetaRule>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct MetaMetric {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub range: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub interpretation: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct MetaRule {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub docs: Option<String>,
}