1use serde::{Deserialize, Serialize};
4use tokmd_types::{ChildIncludeMode, ChildrenMode, ExportFormat, RedactMode};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct LangSettings {
9 #[serde(default)]
11 pub top: usize,
12
13 #[serde(default)]
15 pub files: bool,
16
17 #[serde(default = "default_children_mode")]
19 pub children: ChildrenMode,
20
21 #[serde(default)]
23 pub redact: Option<RedactMode>,
24}
25
26impl Default for LangSettings {
27 fn default() -> Self {
28 Self {
29 top: 0,
30 files: false,
31 children: ChildrenMode::Collapse,
32 redact: None,
33 }
34 }
35}
36
37fn default_children_mode() -> ChildrenMode {
38 ChildrenMode::Collapse
39}
40
41#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct ModuleSettings {
44 #[serde(default)]
46 pub top: usize,
47
48 #[serde(default = "default_module_roots")]
50 pub module_roots: Vec<String>,
51
52 #[serde(default = "default_module_depth")]
54 pub module_depth: usize,
55
56 #[serde(default = "default_child_include_mode")]
58 pub children: ChildIncludeMode,
59
60 #[serde(default)]
62 pub redact: Option<RedactMode>,
63}
64
65fn default_module_roots() -> Vec<String> {
66 vec!["crates".to_string(), "packages".to_string()]
67}
68
69fn default_module_depth() -> usize {
70 2
71}
72
73fn default_child_include_mode() -> ChildIncludeMode {
74 ChildIncludeMode::Separate
75}
76
77impl Default for ModuleSettings {
78 fn default() -> Self {
79 Self {
80 top: 0,
81 module_roots: default_module_roots(),
82 module_depth: default_module_depth(),
83 children: default_child_include_mode(),
84 redact: None,
85 }
86 }
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize)]
91pub struct ExportSettings {
92 #[serde(default = "default_export_format")]
94 pub format: ExportFormat,
95
96 #[serde(default = "default_module_roots")]
98 pub module_roots: Vec<String>,
99
100 #[serde(default = "default_module_depth")]
102 pub module_depth: usize,
103
104 #[serde(default = "default_child_include_mode")]
106 pub children: ChildIncludeMode,
107
108 #[serde(default)]
110 pub min_code: usize,
111
112 #[serde(default)]
114 pub max_rows: usize,
115
116 #[serde(default = "default_redact_mode")]
118 pub redact: RedactMode,
119
120 #[serde(default = "default_meta")]
122 pub meta: bool,
123
124 #[serde(default)]
126 pub strip_prefix: Option<String>,
127}
128
129fn default_redact_mode() -> RedactMode {
130 RedactMode::None
131}
132
133fn default_export_format() -> ExportFormat {
134 ExportFormat::Jsonl
135}
136
137fn default_meta() -> bool {
138 true
139}
140
141impl Default for ExportSettings {
142 fn default() -> Self {
143 Self {
144 format: default_export_format(),
145 module_roots: default_module_roots(),
146 module_depth: default_module_depth(),
147 children: default_child_include_mode(),
148 min_code: 0,
149 max_rows: 0,
150 redact: RedactMode::None,
151 meta: true,
152 strip_prefix: None,
153 }
154 }
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct AnalyzeSettings {
160 #[serde(default = "default_preset")]
162 pub preset: String,
163
164 #[serde(default)]
166 pub window: Option<usize>,
167
168 #[serde(default)]
170 pub git: Option<bool>,
171
172 #[serde(default)]
174 pub max_files: Option<usize>,
175
176 #[serde(default)]
178 pub max_bytes: Option<u64>,
179
180 #[serde(default)]
182 pub max_file_bytes: Option<u64>,
183
184 #[serde(default)]
186 pub max_commits: Option<usize>,
187
188 #[serde(default)]
190 pub max_commit_files: Option<usize>,
191
192 #[serde(default = "default_granularity")]
194 pub granularity: String,
195
196 #[serde(default)]
198 pub effort_model: Option<String>,
199
200 #[serde(default)]
202 pub effort_layer: Option<String>,
203
204 #[serde(default)]
206 pub effort_base_ref: Option<String>,
207
208 #[serde(default)]
210 pub effort_head_ref: Option<String>,
211
212 #[serde(default)]
214 pub effort_monte_carlo: Option<bool>,
215
216 #[serde(default)]
218 pub effort_mc_iterations: Option<usize>,
219
220 #[serde(default)]
222 pub effort_mc_seed: Option<u64>,
223}
224
225fn default_preset() -> String {
226 "receipt".to_string()
227}
228
229fn default_granularity() -> String {
230 "module".to_string()
231}
232
233impl Default for AnalyzeSettings {
234 fn default() -> Self {
235 Self {
236 preset: default_preset(),
237 window: None,
238 git: None,
239 max_files: None,
240 max_bytes: None,
241 max_file_bytes: None,
242 max_commits: None,
243 max_commit_files: None,
244 granularity: default_granularity(),
245 effort_model: None,
246 effort_layer: None,
247 effort_base_ref: None,
248 effort_head_ref: None,
249 effort_monte_carlo: None,
250 effort_mc_iterations: None,
251 effort_mc_seed: None,
252 }
253 }
254}
255
256#[derive(Debug, Clone, Serialize, Deserialize)]
258pub struct CockpitSettings {
259 #[serde(default = "default_cockpit_base")]
261 pub base: String,
262
263 #[serde(default = "default_cockpit_head")]
265 pub head: String,
266
267 #[serde(default = "default_cockpit_range_mode")]
269 pub range_mode: String,
270
271 #[serde(default)]
273 pub baseline: Option<String>,
274}
275
276fn default_cockpit_base() -> String {
277 "main".to_string()
278}
279
280fn default_cockpit_head() -> String {
281 "HEAD".to_string()
282}
283
284fn default_cockpit_range_mode() -> String {
285 "two-dot".to_string()
286}
287
288impl Default for CockpitSettings {
289 fn default() -> Self {
290 Self {
291 base: default_cockpit_base(),
292 head: default_cockpit_head(),
293 range_mode: default_cockpit_range_mode(),
294 baseline: None,
295 }
296 }
297}
298
299#[derive(Debug, Clone, Default, Serialize, Deserialize)]
301pub struct DiffSettings {
302 pub from: String,
304
305 pub to: String,
307}