1use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
9#[serde(rename_all = "camelCase")]
10pub struct Config {
11 #[serde(skip_serializing_if = "Option::is_none")]
13 pub output_format: Option<OutputFormat>,
14
15 #[serde(skip_serializing_if = "Option::is_none")]
17 pub cache_mode: Option<CacheMode>,
18
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub cache_enabled: Option<bool>,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub audit_mode: Option<bool>,
25
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub trace_output: Option<bool>,
29
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub default_environment: Option<String>,
33
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub default_capabilities: Option<Vec<String>>,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub backend: Option<BackendConfig>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub ci: Option<CIConfig>,
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
48#[serde(rename_all = "camelCase")]
49pub struct CIConfig {
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub cuenv: Option<CuenvConfig>,
53}
54
55#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
57#[serde(rename_all = "camelCase")]
58pub struct CuenvConfig {
59 #[serde(default)]
61 pub source: CuenvSource,
62}
63
64impl Default for CuenvConfig {
65 fn default() -> Self {
66 Self {
67 source: CuenvSource::Release,
68 }
69 }
70}
71
72#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default)]
74#[serde(rename_all = "lowercase")]
75pub enum CuenvSource {
76 #[default]
78 Release,
79 Build,
81}
82
83#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
85#[serde(rename_all = "lowercase")]
86pub enum OutputFormat {
87 Tui,
88 Spinner,
89 Simple,
90 Tree,
91 Json,
92}
93
94#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
96#[serde(rename_all = "kebab-case")]
97pub enum CacheMode {
98 Off,
99 Read,
100 ReadWrite,
101 Write,
102}
103
104fn default_backend_type() -> String {
105 "host".to_string()
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
110pub struct BackendConfig {
111 #[serde(default = "default_backend_type", rename = "type")]
113 pub backend_type: String,
114
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub options: Option<BackendOptions>,
118}
119
120#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
122pub struct BackendOptions {
123 #[serde(skip_serializing_if = "Option::is_none")]
125 pub image: Option<String>,
126
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub platform: Option<String>,
130}