cfgd_core/config/
compliance.rs1use serde::{Deserialize, Serialize};
2
3use super::source::default_true;
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
10#[serde(rename_all = "camelCase", deny_unknown_fields)]
11pub struct ComplianceConfig {
12 #[serde(default)]
13 pub enabled: bool,
14 #[serde(default = "default_compliance_interval")]
15 pub interval: String,
16 #[serde(default = "default_compliance_retention")]
17 pub retention: String,
18 #[serde(default)]
19 pub scope: ComplianceScope,
20 #[serde(default)]
21 pub export: ComplianceExport,
22}
23
24fn default_compliance_interval() -> String {
25 "1h".into()
26}
27fn default_compliance_retention() -> String {
28 "30d".into()
29}
30
31#[derive(Debug, Clone, Serialize, Deserialize)]
32#[serde(rename_all = "camelCase", deny_unknown_fields)]
33pub struct ComplianceScope {
34 #[serde(default = "default_true")]
35 pub files: bool,
36 #[serde(default = "default_true")]
37 pub packages: bool,
38 #[serde(default = "default_true")]
39 pub system: bool,
40 #[serde(default = "default_true")]
41 pub secrets: bool,
42 #[serde(default)]
43 pub watch_paths: Vec<String>,
44 #[serde(default)]
45 pub watch_package_managers: Vec<String>,
46}
47
48impl Default for ComplianceScope {
49 fn default() -> Self {
50 Self {
51 files: true,
52 packages: true,
53 system: true,
54 secrets: true,
55 watch_paths: Vec::new(),
56 watch_package_managers: Vec::new(),
57 }
58 }
59}
60
61#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
62pub enum ComplianceFormat {
63 #[default]
64 Json,
65 Yaml,
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize)]
69#[serde(rename_all = "camelCase", deny_unknown_fields)]
70pub struct ComplianceExport {
71 #[serde(default)]
72 pub format: ComplianceFormat,
73 #[serde(default = "default_compliance_path")]
74 pub path: String,
75}
76
77fn default_compliance_path() -> String {
78 "~/.local/share/cfgd/compliance/".into()
79}
80
81impl Default for ComplianceExport {
82 fn default() -> Self {
83 Self {
84 format: ComplianceFormat::default(),
85 path: default_compliance_path(),
86 }
87 }
88}