use serde::{Deserialize, Serialize};
use tokmd_types::{ChildIncludeMode, ChildrenMode, ExportFormat, RedactMode};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LangSettings {
#[serde(default)]
pub top: usize,
#[serde(default)]
pub files: bool,
#[serde(default = "default_children_mode")]
pub children: ChildrenMode,
#[serde(default)]
pub redact: Option<RedactMode>,
}
impl Default for LangSettings {
fn default() -> Self {
Self {
top: 0,
files: false,
children: ChildrenMode::Collapse,
redact: None,
}
}
}
fn default_children_mode() -> ChildrenMode {
ChildrenMode::Collapse
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ModuleSettings {
#[serde(default)]
pub top: usize,
#[serde(default = "default_module_roots")]
pub module_roots: Vec<String>,
#[serde(default = "default_module_depth")]
pub module_depth: usize,
#[serde(default = "default_child_include_mode")]
pub children: ChildIncludeMode,
#[serde(default)]
pub redact: Option<RedactMode>,
}
fn default_module_roots() -> Vec<String> {
vec!["crates".to_string(), "packages".to_string()]
}
fn default_module_depth() -> usize {
2
}
fn default_child_include_mode() -> ChildIncludeMode {
ChildIncludeMode::Separate
}
impl Default for ModuleSettings {
fn default() -> Self {
Self {
top: 0,
module_roots: default_module_roots(),
module_depth: default_module_depth(),
children: default_child_include_mode(),
redact: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExportSettings {
#[serde(default = "default_export_format")]
pub format: ExportFormat,
#[serde(default = "default_module_roots")]
pub module_roots: Vec<String>,
#[serde(default = "default_module_depth")]
pub module_depth: usize,
#[serde(default = "default_child_include_mode")]
pub children: ChildIncludeMode,
#[serde(default)]
pub min_code: usize,
#[serde(default)]
pub max_rows: usize,
#[serde(default = "default_redact_mode")]
pub redact: RedactMode,
#[serde(default = "default_meta")]
pub meta: bool,
#[serde(default)]
pub strip_prefix: Option<String>,
}
fn default_redact_mode() -> RedactMode {
RedactMode::None
}
fn default_export_format() -> ExportFormat {
ExportFormat::Jsonl
}
fn default_meta() -> bool {
true
}
impl Default for ExportSettings {
fn default() -> Self {
Self {
format: default_export_format(),
module_roots: default_module_roots(),
module_depth: default_module_depth(),
children: default_child_include_mode(),
min_code: 0,
max_rows: 0,
redact: RedactMode::None,
meta: true,
strip_prefix: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalyzeSettings {
#[serde(default = "default_preset")]
pub preset: String,
#[serde(default)]
pub window: Option<usize>,
#[serde(default)]
pub git: Option<bool>,
#[serde(default)]
pub max_files: Option<usize>,
#[serde(default)]
pub max_bytes: Option<u64>,
#[serde(default)]
pub max_file_bytes: Option<u64>,
#[serde(default)]
pub max_commits: Option<usize>,
#[serde(default)]
pub max_commit_files: Option<usize>,
#[serde(default = "default_granularity")]
pub granularity: String,
#[serde(default)]
pub effort_model: Option<String>,
#[serde(default)]
pub effort_layer: Option<String>,
#[serde(default)]
pub effort_base_ref: Option<String>,
#[serde(default)]
pub effort_head_ref: Option<String>,
#[serde(default)]
pub effort_monte_carlo: Option<bool>,
#[serde(default)]
pub effort_mc_iterations: Option<usize>,
#[serde(default)]
pub effort_mc_seed: Option<u64>,
}
fn default_preset() -> String {
"receipt".to_string()
}
fn default_granularity() -> String {
"module".to_string()
}
impl Default for AnalyzeSettings {
fn default() -> Self {
Self {
preset: default_preset(),
window: None,
git: None,
max_files: None,
max_bytes: None,
max_file_bytes: None,
max_commits: None,
max_commit_files: None,
granularity: default_granularity(),
effort_model: None,
effort_layer: None,
effort_base_ref: None,
effort_head_ref: None,
effort_monte_carlo: None,
effort_mc_iterations: None,
effort_mc_seed: None,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CockpitSettings {
#[serde(default = "default_cockpit_base")]
pub base: String,
#[serde(default = "default_cockpit_head")]
pub head: String,
#[serde(default = "default_cockpit_range_mode")]
pub range_mode: String,
#[serde(default)]
pub baseline: Option<String>,
}
fn default_cockpit_base() -> String {
"main".to_string()
}
fn default_cockpit_head() -> String {
"HEAD".to_string()
}
fn default_cockpit_range_mode() -> String {
"two-dot".to_string()
}
impl Default for CockpitSettings {
fn default() -> Self {
Self {
base: default_cockpit_base(),
head: default_cockpit_head(),
range_mode: default_cockpit_range_mode(),
baseline: None,
}
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DiffSettings {
pub from: String,
pub to: String,
}