cuenv_core/config/
mod.rs

1//! Configuration types for cuenv
2//!
3//! Based on schema/config.cue
4
5use schemars::JsonSchema;
6use serde::{Deserialize, Serialize};
7
8/// Main configuration structure for cuenv
9#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Default)]
10#[serde(rename_all = "camelCase")]
11pub struct Config {
12    /// Task output format
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub output_format: Option<OutputFormat>,
15
16    /// Cache configuration
17    #[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    /// Security and debugging
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub audit_mode: Option<bool>,
26
27    /// Chrome trace generation
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub trace_output: Option<bool>,
30
31    /// Default environment settings
32    #[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    /// Task backend configuration
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub backend: Option<BackendConfig>,
41}
42
43/// Task output format options
44#[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/// Cache mode options
55#[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/// Backend configuration
69#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Default)]
70pub struct BackendConfig {
71    /// Which backend to use for tasks
72    #[serde(default = "default_backend_type", rename = "type")]
73    pub backend_type: String,
74
75    /// Backend-specific options
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub options: Option<BackendOptions>,
78}
79
80/// Backend-specific options supported by cuenv
81#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Default)]
82pub struct BackendOptions {
83    /// Default container image for the Dagger backend
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub image: Option<String>,
86
87    /// Optional platform hint for the Dagger backend
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub platform: Option<String>,
90}