1use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Default)]
10#[serde(rename_all = "camelCase")]
11pub struct Config {
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub output_format: Option<OutputFormat>,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
18 pub cache_mode: Option<CacheMode>,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub cache_enabled: Option<bool>,
22
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub audit_mode: Option<bool>,
26
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub trace_output: Option<bool>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub default_environment: Option<String>,
34
35 #[serde(skip_serializing_if = "Option::is_none")]
36 pub default_capabilities: Option<Vec<String>>,
37
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub backend: Option<BackendConfig>,
41}
42
43#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
45#[serde(rename_all = "lowercase")]
46pub enum OutputFormat {
47 Tui,
48 Spinner,
49 Simple,
50 Tree,
51 Json,
52}
53
54#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
56#[serde(rename_all = "kebab-case")]
57pub enum CacheMode {
58 Off,
59 Read,
60 ReadWrite,
61 Write,
62}
63
64fn default_backend_type() -> String {
65 "host".to_string()
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Default)]
70pub struct BackendConfig {
71 #[serde(default = "default_backend_type", rename = "type")]
73 pub backend_type: String,
74
75 #[serde(skip_serializing_if = "Option::is_none")]
77 pub options: Option<BackendOptions>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Default)]
82pub struct BackendOptions {
83 #[serde(skip_serializing_if = "Option::is_none")]
85 pub image: Option<String>,
86
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub platform: Option<String>,
90}