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