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