Mountain/Environment/
MountainEnvironment.rs

1// File: Mountain/Source/Environment/MountainEnvironment.rs
2
3//! # MountainEnvironment
4//!
5//! Defines the concrete `MountainEnvironment` struct, which serves as the
6//! central context and dependency injection container for the `Mountain`
7//! application.
8
9#![allow(non_snake_case, non_camel_case_types)]
10
11use std::sync::Arc;
12
13use Common::{
14	Command::CommandExecutor::CommandExecutor,
15	Configuration::{ConfigurationInspector::ConfigurationInspector, ConfigurationProvider::ConfigurationProvider},
16	CustomEditor::CustomEditorProvider::CustomEditorProvider,
17	Debug::DebugService::DebugService,
18	Diagnostic::DiagnosticManager::DiagnosticManager,
19	Document::DocumentProvider::DocumentProvider,
20	Environment::{Environment::Environment, Requires::Requires},
21	Error::CommonError::CommonError,
22	ExtensionManagement::ExtensionManagementService::ExtensionManagementService,
23	FileSystem::{FileSystemReader::FileSystemReader, FileSystemWriter::FileSystemWriter},
24	IPC::IPCProvider::IPCProvider,
25	Keybinding::KeybindingProvider::KeybindingProvider,
26	LanguageFeature::LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
27	Output::OutputChannelManager::OutputChannelManager,
28	Search::SearchProvider::SearchProvider,
29	Secret::SecretProvider::SecretProvider,
30	SourceControlManagement::SourceControlManagementProvider::SourceControlManagementProvider,
31	StatusBar::StatusBarProvider::StatusBarProvider,
32	Storage::StorageProvider::StorageProvider,
33	Synchronization::SynchronizationProvider::SynchronizationProvider,
34	Terminal::TerminalProvider::TerminalProvider,
35	Testing::TestController::TestController,
36	TreeView::TreeViewProvider::TreeViewProvider,
37	UserInterface::UserInterfaceProvider::UserInterfaceProvider,
38	WebView::WebViewProvider::WebViewProvider,
39	WorkSpace::{WorkSpaceEditApplier::WorkSpaceEditApplier, WorkSpaceProvider::WorkSpaceProvider},
40};
41use async_trait::async_trait;
42use log::{info, warn};
43use serde_json::Value;
44use tauri::{AppHandle, Manager, Wry};
45
46use crate::ApplicationState::ApplicationState::ApplicationState;
47
48/// The concrete `Environment` for the Mountain application.
49#[derive(Clone)]
50pub struct MountainEnvironment {
51	pub ApplicationHandle:AppHandle<Wry>,
52
53	pub ApplicationState:Arc<ApplicationState>,
54}
55
56impl MountainEnvironment {
57	/// Creates a new `MountainEnvironment` instance.
58	pub fn Create(ApplicationHandle:AppHandle<Wry>) -> Self {
59		info!("[MountainEnvironment] New instance created.");
60
61		let ApplicationState = ApplicationHandle.state::<Arc<ApplicationState>>().inner().clone();
62
63		Self { ApplicationHandle, ApplicationState }
64	}
65}
66
67impl Environment for MountainEnvironment {}
68
69#[async_trait]
70impl ExtensionManagementService for MountainEnvironment {
71	async fn ScanForExtensions(&self) -> Result<(), CommonError> {
72		warn!("[ExtensionManagementService] ScanForExtensions is a stub.");
73
74		Err(CommonError::NotImplemented { FeatureName:"ScanForExtensions".into() })
75	}
76
77	async fn GetExtensions(&self) -> Result<Vec<Value>, CommonError> {
78		let ScannedExtensionsGuard = self
79			.ApplicationState
80			.ScannedExtensions
81			.lock()
82			.map_err(|Error| CommonError::StateLockPoisoned { Context:Error.to_string() })?;
83
84		let Extensions:Vec<Value> = ScannedExtensionsGuard
85			.values()
86			.map(|ext| serde_json::to_value(ext).unwrap_or(Value::Null))
87			.collect();
88
89		Ok(Extensions)
90	}
91
92	async fn GetExtension(&self, _id:String) -> Result<Option<Value>, CommonError> {
93		warn!("[ExtensionManagementService] GetExtension is a stub.");
94
95		Err(CommonError::NotImplemented { FeatureName:"GetExtension".into() })
96	}
97}
98
99// --- Capability Requirement Implementations (DI) ---
100
101impl Requires<dyn CommandExecutor> for MountainEnvironment {
102	fn Require(&self) -> Arc<dyn CommandExecutor> { Arc::new(self.clone()) }
103}
104
105impl Requires<dyn ConfigurationProvider> for MountainEnvironment {
106	fn Require(&self) -> Arc<dyn ConfigurationProvider> { Arc::new(self.clone()) }
107}
108
109impl Requires<dyn ConfigurationInspector> for MountainEnvironment {
110	fn Require(&self) -> Arc<dyn ConfigurationInspector> { Arc::new(self.clone()) }
111}
112
113impl Requires<dyn CustomEditorProvider> for MountainEnvironment {
114	fn Require(&self) -> Arc<dyn CustomEditorProvider> { Arc::new(self.clone()) }
115}
116
117impl Requires<dyn DiagnosticManager> for MountainEnvironment {
118	fn Require(&self) -> Arc<dyn DiagnosticManager> { Arc::new(self.clone()) }
119}
120
121impl Requires<dyn DocumentProvider> for MountainEnvironment {
122	fn Require(&self) -> Arc<dyn DocumentProvider> { Arc::new(self.clone()) }
123}
124
125impl Requires<dyn FileSystemReader> for MountainEnvironment {
126	fn Require(&self) -> Arc<dyn FileSystemReader> { Arc::new(self.clone()) }
127}
128
129impl Requires<dyn FileSystemWriter> for MountainEnvironment {
130	fn Require(&self) -> Arc<dyn FileSystemWriter> { Arc::new(self.clone()) }
131}
132
133impl Requires<dyn IPCProvider> for MountainEnvironment {
134	fn Require(&self) -> Arc<dyn IPCProvider> { Arc::new(self.clone()) }
135}
136
137impl Requires<dyn LanguageFeatureProviderRegistry> for MountainEnvironment {
138	fn Require(&self) -> Arc<dyn LanguageFeatureProviderRegistry> { Arc::new(self.clone()) }
139}
140
141impl Requires<dyn OutputChannelManager> for MountainEnvironment {
142	fn Require(&self) -> Arc<dyn OutputChannelManager> { Arc::new(self.clone()) }
143}
144
145impl Requires<dyn SourceControlManagementProvider> for MountainEnvironment {
146	fn Require(&self) -> Arc<dyn SourceControlManagementProvider> { Arc::new(self.clone()) }
147}
148
149impl Requires<dyn SecretProvider> for MountainEnvironment {
150	fn Require(&self) -> Arc<dyn SecretProvider> { Arc::new(self.clone()) }
151}
152
153impl Requires<dyn StatusBarProvider> for MountainEnvironment {
154	fn Require(&self) -> Arc<dyn StatusBarProvider> { Arc::new(self.clone()) }
155}
156
157impl Requires<dyn StorageProvider> for MountainEnvironment {
158	fn Require(&self) -> Arc<dyn StorageProvider> { Arc::new(self.clone()) }
159}
160
161impl Requires<dyn SynchronizationProvider> for MountainEnvironment {
162	fn Require(&self) -> Arc<dyn SynchronizationProvider> { Arc::new(self.clone()) }
163}
164
165impl Requires<dyn TerminalProvider> for MountainEnvironment {
166	fn Require(&self) -> Arc<dyn TerminalProvider> { Arc::new(self.clone()) }
167}
168
169impl Requires<dyn TestController> for MountainEnvironment {
170	fn Require(&self) -> Arc<dyn TestController> { Arc::new(self.clone()) }
171}
172
173impl Requires<dyn TreeViewProvider> for MountainEnvironment {
174	fn Require(&self) -> Arc<dyn TreeViewProvider> { Arc::new(self.clone()) }
175}
176
177impl Requires<dyn UserInterfaceProvider> for MountainEnvironment {
178	fn Require(&self) -> Arc<dyn UserInterfaceProvider> { Arc::new(self.clone()) }
179}
180
181impl Requires<dyn WebViewProvider> for MountainEnvironment {
182	fn Require(&self) -> Arc<dyn WebViewProvider> { Arc::new(self.clone()) }
183}
184
185impl Requires<dyn WorkSpaceProvider> for MountainEnvironment {
186	fn Require(&self) -> Arc<dyn WorkSpaceProvider> { Arc::new(self.clone()) }
187}
188
189impl Requires<dyn WorkSpaceEditApplier> for MountainEnvironment {
190	fn Require(&self) -> Arc<dyn WorkSpaceEditApplier> { Arc::new(self.clone()) }
191}
192
193impl Requires<dyn ExtensionManagementService> for MountainEnvironment {
194	fn Require(&self) -> Arc<dyn ExtensionManagementService> { Arc::new(self.clone()) }
195}
196
197impl Requires<dyn DebugService> for MountainEnvironment {
198	fn Require(&self) -> Arc<dyn DebugService> { Arc::new(self.clone()) }
199}
200
201impl Requires<dyn KeybindingProvider> for MountainEnvironment {
202	fn Require(&self) -> Arc<dyn KeybindingProvider> { Arc::new(self.clone()) }
203}
204
205impl Requires<dyn SearchProvider> for MountainEnvironment {
206	fn Require(&self) -> Arc<dyn SearchProvider> { Arc::new(self.clone()) }
207}