syncable_cli/config/
types.rs

1use serde::{Deserialize, Serialize};
2
3/// Main configuration structure
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct Config {
6    pub analysis: AnalysisConfig,
7    pub generation: GenerationConfig,
8    pub output: OutputConfig,
9    pub telemetry: TelemetryConfig,  // New field for telemetry configuration
10}
11
12/// Analysis configuration
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct AnalysisConfig {
15    pub include_dev_dependencies: bool,
16    pub deep_analysis: bool,
17    pub ignore_patterns: Vec<String>,
18    pub max_file_size: usize,
19}
20
21/// Generation configuration
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct GenerationConfig {
24    pub dockerfile: DockerfileConfig,
25    pub compose: ComposeConfig,
26    pub terraform: TerraformConfig,
27}
28
29/// Dockerfile generation configuration
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct DockerfileConfig {
32    pub base_image_override: Option<String>,
33    pub use_multi_stage: bool,
34    pub optimize_for_size: bool,
35    pub include_health_check: bool,
36}
37
38/// Docker Compose generation configuration
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct ComposeConfig {
41    pub version: String,
42    pub include_database: bool,
43    pub include_redis: bool,
44}
45
46/// Terraform generation configuration
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub struct TerraformConfig {
49    pub provider: String,
50    pub include_networking: bool,
51    pub include_monitoring: bool,
52}
53
54/// Output configuration
55#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct OutputConfig {
57    pub format: OutputFormat,
58    pub overwrite_existing: bool,
59    pub create_backup: bool,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
63pub enum OutputFormat {
64    Files,
65    Stdout,
66    Json,
67}
68
69// Telemetry configuration
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct TelemetryConfig {
72    pub enabled: bool,
73}
74
75impl Default for Config {
76    fn default() -> Self {
77        Self {
78            analysis: AnalysisConfig {
79                include_dev_dependencies: false,
80                deep_analysis: true,
81                ignore_patterns: vec![
82                    "node_modules".to_string(),
83                    ".git".to_string(),
84                    "target".to_string(),
85                    "build".to_string(),
86                ],
87                max_file_size: 1024 * 1024, // 1MB
88            },
89            generation: GenerationConfig {
90                dockerfile: DockerfileConfig {
91                    base_image_override: None,
92                    use_multi_stage: true,
93                    optimize_for_size: true,
94                    include_health_check: true,
95                },
96                compose: ComposeConfig {
97                    version: "3.8".to_string(),
98                    include_database: false,
99                    include_redis: false,
100                },
101                terraform: TerraformConfig {
102                    provider: "docker".to_string(),
103                    include_networking: true,
104                    include_monitoring: false,
105                },
106            },
107            output: OutputConfig {
108                format: OutputFormat::Files,
109                overwrite_existing: false,
110                create_backup: true,
111            },
112            telemetry: TelemetryConfig {
113                enabled: true, // Telemetry enabled by default
114            },
115        }
116    }
117}