use super::GodObjectThresholds;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
#[serde(rename_all = "lowercase")]
pub enum VerbosityLevel {
Summary,
#[default]
Detailed,
Comprehensive,
}
#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
#[serde(rename_all = "lowercase")]
pub enum EvidenceVerbosity {
#[default]
Minimal,
Standard,
Verbose,
VeryVerbose,
}
impl From<u8> for EvidenceVerbosity {
fn from(count: u8) -> Self {
match count {
0 => Self::Minimal,
1 => Self::Standard,
2 => Self::Verbose,
_ => Self::VeryVerbose,
}
}
}
impl From<EvidenceVerbosity> for u8 {
fn from(level: EvidenceVerbosity) -> Self {
match level {
EvidenceVerbosity::Minimal => 0,
EvidenceVerbosity::Standard => 1,
EvidenceVerbosity::Verbose => 2,
EvidenceVerbosity::VeryVerbose => 3,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DisplayConfig {
#[serde(default = "default_tiered_display")]
pub tiered: bool,
#[serde(default = "default_items_per_tier")]
pub items_per_tier: usize,
#[serde(default)]
pub verbosity: VerbosityLevel,
}
impl Default for DisplayConfig {
fn default() -> Self {
Self {
tiered: default_tiered_display(),
items_per_tier: default_items_per_tier(),
verbosity: VerbosityLevel::default(),
}
}
}
fn default_tiered_display() -> bool {
true }
fn default_items_per_tier() -> usize {
5
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GodObjectConfig {
#[serde(default = "default_god_object_enabled")]
pub enabled: bool,
#[serde(default)]
pub rust: GodObjectThresholds,
#[serde(default)]
pub python: GodObjectThresholds,
#[serde(default)]
pub javascript: GodObjectThresholds,
}
impl Default for GodObjectConfig {
fn default() -> Self {
Self {
enabled: true,
rust: GodObjectThresholds::rust_defaults(),
python: GodObjectThresholds::python_defaults(),
javascript: GodObjectThresholds::javascript_defaults(),
}
}
}
fn default_god_object_enabled() -> bool {
true
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SignalFilterConfig {
#[serde(default = "default_true")]
pub show_io_detection: bool,
#[serde(default = "default_true")]
pub show_call_graph: bool,
#[serde(default = "default_true")]
pub show_type_signatures: bool,
#[serde(default = "default_true")]
pub show_purity: bool,
#[serde(default = "default_true")]
pub show_framework: bool,
#[serde(default)]
pub show_name_heuristics: bool,
}
impl Default for SignalFilterConfig {
fn default() -> Self {
Self {
show_io_detection: true,
show_call_graph: true,
show_type_signatures: true,
show_purity: true,
show_framework: true,
show_name_heuristics: false, }
}
}
fn default_true() -> bool {
true
}