Skip to main content

Mountain/Environment/ConfigurationProvider/
mod.rs

1//! # ConfigurationProvider (Environment)
2//!
3//! Implements `ConfigurationProvider` and `ConfigurationInspector` traits,
4//! managing all application settings across multiple scopes (Default, User,
5//! Workspace, Folder). It handles the configuration cascade, merging settings
6//! from various sources in the correct precedence order.
7//!
8//! ## Implementation Strategy
9//!
10//! The trait implementation is split across multiple helper modules for
11//! maintainability:
12//! - `GetValue`: `GetConfigurationValue` - retrieval from merged cache
13//! - `UpdateValue`: `UpdateConfigurationValue` - persistence and re-merge
14//! - `InspectValue`: `InspectConfigurationValue` - introspection across
15//! scopes
16//! - `Loading`: `ReadAndParseConfigurationFile`,
17//! `InitializeAndMergeConfigurations`
18//!
19//! The single `impl ConfigurationProvider for MountainEnvironment` block in
20//! this file delegates to those helper functions. This satisfies Rust's orphan
21//! rules while keeping code organized.
22
23use CommonLibrary::{
24	Configuration::{
25		ConfigurationInspector::ConfigurationInspector,
26		ConfigurationProvider::ConfigurationProvider,
27		DTO::{
28			ConfigurationOverridesDTO::ConfigurationOverridesDTO,
29			ConfigurationTarget::ConfigurationTarget,
30			InspectResultDataDTO::InspectResultDataDTO,
31		},
32	},
33	Error::CommonError::CommonError,
34};
35use async_trait::async_trait;
36
37// Private helper modules (not re-exported)
38mod GetValue;
39
40mod UpdateValue;
41
42mod InspectValue;
43
44pub mod Loading; // Make public for external callers like ConfigurationInitialize
45
46#[async_trait]
47impl ConfigurationProvider for crate::Environment::MountainEnvironment::MountainEnvironment {
48	async fn GetConfigurationValue(
49		&self,
50
51		Section:Option<String>,
52
53		Overrides:ConfigurationOverridesDTO,
54	) -> Result<serde_json::Value, CommonError> {
55		GetValue::get_configuration_value(self, Section, Overrides).await
56	}
57
58	async fn UpdateConfigurationValue(
59		&self,
60
61		Key:String,
62
63		Value:serde_json::Value,
64
65		Target:ConfigurationTarget,
66
67		Overrides:ConfigurationOverridesDTO,
68
69		ScopeToLanguage:Option<bool>,
70	) -> Result<(), CommonError> {
71		UpdateValue::update_configuration_value(self, Key, Value, Target, Overrides, ScopeToLanguage).await
72	}
73}
74
75#[async_trait]
76impl ConfigurationInspector for crate::Environment::MountainEnvironment::MountainEnvironment {
77	async fn InspectConfigurationValue(
78		&self,
79
80		Key:String,
81
82		Overrides:ConfigurationOverridesDTO,
83	) -> Result<Option<InspectResultDataDTO>, CommonError> {
84		InspectValue::inspect_configuration_value(self, Key, Overrides).await
85	}
86}