Skip to main content

Mountain/Environment/ConfigurationProvider/
GetValue.rs

1//! Configuration value retrieval.
2
3use CommonLibrary::{
4	Configuration::DTO::ConfigurationOverridesDTO::ConfigurationOverridesDTO,
5	Error::CommonError::CommonError,
6};
7use serde_json::Value;
8
9use crate::dev_log;
10
11/// Retrieves a configuration value from the cached, merged configuration.
12pub(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			// Navigate through the configuration using dot notation
34			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	// Validate that the configuration value exists
54	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}