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}
44
45#[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
46#[serde(rename_all = "camelCase")]
47pub struct ApertureSecret {
48    pub source: SecretSource,
49    pub name: String,
50}
51
52#[derive(Debug, Deserialize, Serialize, PartialEq, Eq)]
53#[serde(rename_all = "camelCase")]
54pub enum SecretSource {
55    Env,
56    // Keychain, // Future option
57}