aperture_cli/config/
models.rs

1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4#[derive(Debug, Clone, Deserialize, Serialize)]
5pub struct GlobalConfig {
6    #[serde(default = "default_timeout_secs_value")]
7    pub default_timeout_secs: u64,
8    #[serde(default)]
9    pub agent_defaults: AgentDefaults,
10    /// Per-API configuration overrides
11    #[serde(default)]
12    pub api_configs: HashMap<String, ApiConfig>,
13}
14
15const fn default_timeout_secs_value() -> u64 {
16    30
17}
18
19#[derive(Debug, Clone, Deserialize, Serialize, Default)]
20pub struct AgentDefaults {
21    #[serde(default)]
22    pub json_errors: bool,
23}
24
25impl Default for GlobalConfig {
26    fn default() -> Self {
27        Self {
28            default_timeout_secs: 30,
29            agent_defaults: AgentDefaults::default(),
30            api_configs: HashMap::new(),
31        }
32    }
33}
34
35/// Per-API configuration for base URLs and environment-specific settings
36#[derive(Debug, Deserialize, Serialize, Clone)]
37pub struct ApiConfig {
38    /// Override base URL for this API
39    pub base_url_override: Option<String>,
40    /// Environment-specific base URLs (e.g., "dev", "staging", "prod")
41    #[serde(default)]
42    pub environment_urls: HashMap<String, String>,
43    /// Whether this spec was added with --strict flag (preserved for reinit)
44    #[serde(default)]
45    pub strict_mode: bool,
46    /// Secret configurations for security schemes (overrides x-aperture-secret extensions)
47    #[serde(default)]
48    pub secrets: HashMap<String, ApertureSecret>,
49}
50
51#[derive(Debug, Deserialize, Serialize, PartialEq, Eq, Clone)]
52#[serde(rename_all = "camelCase")]
53pub struct ApertureSecret {
54    pub source: SecretSource,
55    pub name: String,
56}
57
58#[derive(Debug, Deserialize, Serialize, PartialEq, Eq, Clone)]
59#[serde(rename_all = "camelCase")]
60pub enum SecretSource {
61    Env,
62    // Keychain, // Future option
63}