use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize, Clone)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct Thresholds {
#[serde(default = "default_max_lines")]
pub max_lines: usize,
#[serde(default = "default_max_depth")]
pub max_depth: usize,
#[serde(default = "default_max_imports")]
pub max_imports: usize,
#[serde(default = "default_max_repetition")]
pub max_repetition: f64,
}
#[must_use]
pub const fn default_max_lines() -> usize {
250
}
#[must_use]
pub const fn default_max_depth() -> usize {
5
}
#[must_use]
pub const fn default_max_imports() -> usize {
20
}
#[must_use]
pub const fn default_max_repetition() -> f64 {
10.0
}
impl Default for Thresholds {
fn default() -> Self {
Self {
max_lines: 250,
max_depth: 5,
max_imports: 20,
max_repetition: 10.0,
}
}
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ThresholdsConfig {
#[serde(default)]
pub global: Thresholds,
#[serde(default)]
pub overrides: HashMap<String, PartialThresholds>,
}
#[derive(Debug, Serialize, Deserialize, Clone, Default)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct PartialThresholds {
pub max_lines: Option<usize>,
pub max_depth: Option<usize>,
pub max_imports: Option<usize>,
pub max_repetition: Option<f64>,
}