ayun_config/support/
instance.rs

1use crate::{
2    error::Error,
3    traits::{ConfigurationTrait, Source},
4    Config,
5};
6use ayun_core::{
7    error::ContainerError,
8    support::{base_path, Container},
9    traits::{ErrorTrait, InstanceTrait},
10    Result,
11};
12use std::str::FromStr;
13
14impl InstanceTrait for Config {
15    fn register(_: &Container) -> Result<Self, ContainerError> {
16        let args: Vec<String> = std::env::args()
17            .filter(|arg| arg.starts_with("--config="))
18            .map(|arg| arg.replace("--config=", ""))
19            .collect();
20
21        let source = args
22            .first()
23            .map(|arg| arg.to_owned())
24            .unwrap_or(".config.toml".to_owned());
25
26        // find package config file (not workspace config file)
27        let paths = [base_path(&source), base_path(".env")];
28
29        Ok(
30            Self::try_from_source(match paths.iter().find(|path| path.exists()) {
31                None => Source::Default,
32                Some(path) => Source::from_str(&path.to_string_lossy()).map_err(Error::wrap)?,
33            })
34            .map_err(Error::wrap)?,
35        )
36    }
37}