Mountain/Environment/ConfigurationProvider/
GetValue.rs

1//! Configuration value retrieval.
2
3use CommonLibrary::{
4	Configuration::DTO::ConfigurationOverridesDTO::ConfigurationOverridesDTO,
5	Error::CommonError::CommonError,
6};
7use log::{debug, warn};
8use serde_json::Value;
9
10/// Retrieves a configuration value from the cached, merged configuration.
11pub(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			// Navigate through the configuration using dot notation
29			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	// Validate that the configuration value exists
47	if configuration_value.is_null() {
48		warn!("[ConfigurationProvider] Configuration section not found: {:?}", section);
49	}
50
51	Ok(configuration_value)
52}