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;
39mod UpdateValue;
40mod InspectValue;
41pub mod Loading; // Make public for external callers like ConfigurationInitialize
42
43#[async_trait]
44impl ConfigurationProvider for crate::Environment::MountainEnvironment::MountainEnvironment {
45	async fn GetConfigurationValue(
46		&self,
47		Section:Option<String>,
48		Overrides:ConfigurationOverridesDTO,
49	) -> Result<serde_json::Value, CommonError> {
50		GetValue::get_configuration_value(self, Section, Overrides).await
51	}
52
53	async fn UpdateConfigurationValue(
54		&self,
55		Key:String,
56		Value:serde_json::Value,
57		Target:ConfigurationTarget,
58		Overrides:ConfigurationOverridesDTO,
59		ScopeToLanguage:Option<bool>,
60	) -> Result<(), CommonError> {
61		UpdateValue::update_configuration_value(self, Key, Value, Target, Overrides, ScopeToLanguage).await
62	}
63}
64
65#[async_trait]
66impl ConfigurationInspector for crate::Environment::MountainEnvironment::MountainEnvironment {
67	async fn InspectConfigurationValue(
68		&self,
69		Key:String,
70		Overrides:ConfigurationOverridesDTO,
71	) -> Result<Option<InspectResultDataDTO>, CommonError> {
72		InspectValue::inspect_configuration_value(self, Key, Overrides).await
73	}
74}