cala_server/cli/
config.rs1use 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}