Skip to main content

nexus_common/config/
stack.rs

1use crate::db::DatabaseConfig;
2use serde::{Deserialize, Deserializer, Serialize};
3use std::{fmt::Debug, path::PathBuf};
4
5use super::{file::expand_home_dir, Level, FILES_DIR, LOG_LEVEL};
6
7/// Custom deserializer: take a String, expand `~`, clean up `.`/`..`, return PathBuf.
8fn deserialize_and_expand<'de, D>(deserializer: D) -> Result<PathBuf, D::Error>
9where
10    D: Deserializer<'de>,
11{
12    let path: PathBuf = Deserialize::deserialize(deserializer)?;
13    Ok(expand_home_dir(path))
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
17pub struct StackConfig {
18    pub log_level: Level,
19    #[serde(deserialize_with = "deserialize_and_expand")]
20    pub files_path: PathBuf,
21    pub otlp_endpoint: Option<String>,
22    pub db: DatabaseConfig,
23}
24
25/// Utility function
26pub fn default_stack() -> StackConfig {
27    StackConfig::default()
28}
29
30impl Default for StackConfig {
31    fn default() -> Self {
32        Self {
33            log_level: LOG_LEVEL,
34            files_path: expand_home_dir(PathBuf::from(FILES_DIR)),
35            otlp_endpoint: None,
36            db: DatabaseConfig::default(),
37        }
38    }
39}