Mountain/Environment/ConfigurationProvider/
GetValue.rs1use CommonLibrary::{
4 Configuration::DTO::ConfigurationOverridesDTO::ConfigurationOverridesDTO,
5 Error::CommonError::CommonError,
6};
7use serde_json::Value;
8
9use crate::dev_log;
10
11pub(super) async fn get_configuration_value(
13 environment:&crate::Environment::MountainEnvironment::MountainEnvironment,
14 section:Option<String>,
15 _overrides:ConfigurationOverridesDTO,
16) -> Result<Value, CommonError> {
17 dev_log!(
18 "config",
19 "[ConfigurationProvider] Getting configuration for section: {:?}",
20 section
21 );
22
23 let configuration_guard = environment
24 .ApplicationState
25 .Configuration
26 .GlobalConfiguration
27 .lock()
28 .map_err(|e| CommonError::StateLockPoisoned { Context:format!("Failed to lock configuration: {}", e) })?;
29
30 let configuration_value = match section.as_deref() {
31 None => (*configuration_guard).clone(),
32 Some(section_path) => {
33 let mut current = &*configuration_guard;
35 for key in section_path.split('.') {
36 current = match current.get(key) {
37 Some(value) => value,
38 None => {
39 dev_log!(
40 "config",
41 "warn: [ConfigurationProvider] Configuration section '{}' not found in path: {:?}",
42 key,
43 section_path
44 );
45 return Ok(Value::Null);
46 },
47 };
48 }
49 current.clone()
50 },
51 };
52
53 if configuration_value.is_null() {
55 dev_log!(
56 "config",
57 "warn: [ConfigurationProvider] Configuration section not found: {:?}",
58 section
59 );
60 }
61
62 Ok(configuration_value)
63}