ayun_config/support/
instance.rs1use 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 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}