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