Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindServiceAdapters/
WindServiceAdapter.rs

1//! Bridge between Mountain's runtime and Wind's expected
2//! service interfaces. `convert_to_wind_configuration` turns
3//! Mountain's sandbox config into the
4//! `WindDesktopConfiguration::Struct` Sky deserialises;
5//! `get_*_service` factories produce the per-domain wrappers
6//! (env, file, storage, configuration) Wind needs.
7
8use std::sync::Arc;
9
10use CommonLibrary::{
11	Configuration::ConfigurationProvider::ConfigurationProvider,
12	Environment::Requires::Requires,
13	FileSystem::{FileSystemReader::FileSystemReader, FileSystemWriter::FileSystemWriter},
14	Storage::StorageProvider::StorageProvider,
15};
16
17use crate::{
18	IPC::WindServiceAdapters::{
19		MountainSandboxConfiguration::Struct as MountainSandboxConfiguration,
20		OsInfo::Struct as OsInfo,
21		Profiles::Struct as Profiles,
22		WindConfigurationService::Struct as WindConfigurationService,
23		WindDesktopConfiguration::Struct as WindDesktopConfiguration,
24		WindEnvironmentService::Struct as WindEnvironmentService,
25		WindFileService::Struct as WindFileService,
26		WindStorageService::Struct as WindStorageService,
27	},
28	RunTime::ApplicationRunTime::ApplicationRunTime,
29	dev_log,
30};
31
32pub struct Struct {
33	pub(super) runtime:Arc<ApplicationRunTime>,
34}
35
36impl Struct {
37	pub fn new(runtime:Arc<ApplicationRunTime>) -> Self {
38		dev_log!("ipc", "[WindServiceAdapters] Creating Wind service adapter");
39
40		Self { runtime }
41	}
42
43	pub async fn convert_to_wind_configuration(
44		&self,
45
46		mountain_config:serde_json::Value,
47	) -> Result<WindDesktopConfiguration, String> {
48		dev_log!("ipc", "[WindServiceAdapters] Converting Mountain config to Wind config");
49
50		let config:MountainSandboxConfiguration = serde_json::from_value(mountain_config)
51			.map_err(|e| format!("Failed to parse Mountain configuration: {}", e))?;
52
53		Ok(WindDesktopConfiguration {
54			window_id:config.window_id.parse().unwrap_or(1),
55			app_root:config.app_root,
56			user_data_path:config.user_data_dir,
57			temp_path:config.tmp_dir,
58			log_level:config.log_level.to_string(),
59			is_packaged:config.product_configuration.is_packaged,
60			tauri_version:config.versions.mountain,
61			platform:config.platform,
62			arch:config.arch,
63			workspace:None,
64			files_to_open_or_create:None,
65			files_to_diff:None,
66			files_to_wait:None,
67			fullscreen:Some(false),
68			zoom_level:Some(config.zoom_level),
69			is_custom_zoom_level:Some(false),
70			profiles:Profiles { all:vec![], home:config.home_dir, profile:serde_json::Value::Null },
71			policies_data:None,
72			loggers:vec![],
73			backup_path:Some(config.backup_path),
74			disable_layout_restore:Some(false),
75			os:OsInfo { release:std::env::consts::OS.to_string() },
76		})
77	}
78
79	pub async fn get_environment_service(&self) -> Result<WindEnvironmentService, String> {
80		dev_log!("ipc", "[WindServiceAdapters] Getting Wind environment service");
81
82		Ok(WindEnvironmentService::new())
83	}
84
85	pub async fn get_file_service(&self) -> Result<WindFileService, String> {
86		dev_log!("ipc", "[WindServiceAdapters] Getting Wind file service");
87
88		let file_system_reader:Arc<dyn FileSystemReader> = self.runtime.Environment.Require();
89
90		let file_system_writer:Arc<dyn FileSystemWriter> = self.runtime.Environment.Require();
91
92		Ok(WindFileService::new(file_system_reader, file_system_writer))
93	}
94
95	pub async fn get_storage_service(&self) -> Result<WindStorageService, String> {
96		dev_log!("ipc", "[WindServiceAdapters] Getting Wind storage service");
97
98		let storage:Arc<dyn StorageProvider> = self.runtime.Environment.Require();
99
100		Ok(WindStorageService::new(storage))
101	}
102
103	pub async fn get_configuration_service(&self) -> Result<WindConfigurationService, String> {
104		dev_log!("ipc", "[WindServiceAdapters] Getting Wind configuration service");
105
106		let config:Arc<dyn ConfigurationProvider> = self.runtime.Environment.Require();
107
108		Ok(WindConfigurationService::new(config))
109	}
110}