cala_server/cli/
config.rs

1use anyhow::Context;
2use cala_tracing::TracingConfig;
3use serde::{Deserialize, Serialize};
4
5use std::path::Path;
6
7use super::db::*;
8use crate::{app::AppConfig, server::ServerConfig};
9
10#[derive(Clone, Default, Serialize, Deserialize)]
11pub struct Config {
12    #[serde(default)]
13    pub db: DbConfig,
14    #[serde(default)]
15    pub server: ServerConfig,
16    #[serde(default)]
17    pub app: AppConfig,
18    #[serde(default)]
19    pub tracing: TracingConfig,
20}
21
22pub struct EnvOverride {
23    pub db_con: String,
24}
25
26impl Config {
27    pub fn load_config(
28        path: Option<impl AsRef<Path>>,
29        env_override: EnvOverride,
30    ) -> anyhow::Result<Self> {
31        let mut config = if let Some(config_path) = path {
32            let config_file =
33                std::fs::read_to_string(config_path).context("Couldn't read config file")?;
34            serde_yaml::from_str(&config_file).context("Couldn't parse config file")?
35        } else {
36            println!("No config file provided, using default config.");
37            Config::default()
38        };
39
40        config.apply_env_override(env_override);
41        Ok(config)
42    }
43
44    fn apply_env_override(&mut self, EnvOverride { db_con }: EnvOverride) {
45        self.db.pg_con = db_con;
46    }
47}