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
42#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
44#[serde(rename_all = "lowercase")]
45pub enum OutputFormat {
46 Tui,
47 Spinner,
48 Simple,
49 Tree,
50 Json,
51}
52
53#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
55#[serde(rename_all = "kebab-case")]
56pub enum CacheMode {
57 Off,
58 Read,
59 ReadWrite,
60 Write,
61}
62
63fn default_backend_type() -> String {
64 "host".to_string()
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
69pub struct BackendConfig {
70 #[serde(default = "default_backend_type", rename = "type")]
72 pub backend_type: String,
73
74 #[serde(skip_serializing_if = "Option::is_none")]
76 pub options: Option<BackendOptions>,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
81pub struct BackendOptions {
82 #[serde(skip_serializing_if = "Option::is_none")]
84 pub image: Option<String>,
85
86 #[serde(skip_serializing_if = "Option::is_none")]
88 pub platform: Option<String>,
89}