cuenv_core/config/
mod.rs

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