Skip to main content

Mountain/IPC/WindServiceHandlers/
Configuration.rs

1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3//! Configuration, environment, and workbench-configuration handlers.
4
5use std::sync::Arc;
6
7use serde_json::{Value, json};
8use CommonLibrary::Configuration::DTO::{
9	ConfigurationOverridesDTO as ConfigurationOverridesDTOModule,
10	ConfigurationTarget as ConfigurationTargetModule,
11};
12
13type ConfigurationOverridesDTO = ConfigurationOverridesDTOModule::ConfigurationOverridesDTO;
14
15type ConfigurationTarget = ConfigurationTargetModule::ConfigurationTarget;
16
17use CommonLibrary::{Configuration::ConfigurationProvider::ConfigurationProvider, Environment::Requires::Requires};
18
19use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
20
21/// Handler for configuration get requests
22pub async fn ConfigurationGet(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
23	let key = Arguments
24		.get(0)
25		.ok_or("Missing configuration key".to_string())?
26		.as_str()
27		.ok_or("Configuration key must be a string".to_string())?;
28
29	let provider:Arc<dyn ConfigurationProvider> = RunTime.Environment.Require();
30
31	let value = provider
32		.GetConfigurationValue(Some(key.to_string()), ConfigurationOverridesDTO::default())
33		.await
34		.map_err(|Error| format!("Failed to get configuration: {}", Error))?;
35
36	dev_log!("config", "get: {} = {:?}", key, value);
37
38	Ok(value)
39}
40
41/// Handler for configuration update requests
42pub async fn ConfigurationUpdate(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
43	let key = Arguments
44		.get(0)
45		.ok_or("Missing configuration key".to_string())?
46		.as_str()
47		.ok_or("Configuration key must be a string".to_string())?;
48
49	let value = Arguments.get(1).ok_or("Missing configuration value".to_string())?.clone();
50
51	let provider:Arc<dyn ConfigurationProvider> = RunTime.Environment.Require();
52
53	provider
54		.UpdateConfigurationValue(
55			key.to_string(),
56			value,
57			ConfigurationTarget::User,
58			ConfigurationOverridesDTO::default(),
59			None,
60		)
61		.await
62		.map_err(|Error| format!("Failed to update configuration: {}", Error))?;
63
64	dev_log!("config", "updated: {}", key);
65
66	Ok(Value::Null)
67}
68
69/// Handler for workbench configuration requests
70pub async fn WorkbenchConfiguration(RunTime:Arc<ApplicationRunTime>, _Arguments:Vec<Value>) -> Result<Value, String> {
71	let provider:Arc<dyn ConfigurationProvider> = RunTime.Environment.Require();
72
73	let config = provider
74		.GetConfigurationValue(None, ConfigurationOverridesDTO::default())
75		.await
76		.map_err(|Error| format!("Failed to get workbench configuration: {}", Error))?;
77
78	dev_log!("config", "workbench config retrieved");
79
80	Ok(config)
81}
82
83/// Handler for environment get requests
84pub async fn EnvironmentGet(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
85	let key = Arguments
86		.get(0)
87		.ok_or("Missing environment key".to_string())?
88		.as_str()
89		.ok_or("Environment key must be a string".to_string())?;
90
91	let value = std::env::var(key).map_err(|Error| format!("Failed to get environment variable: {}", Error))?;
92
93	dev_log!("config", "env_get: {}", key);
94
95	Ok(json!(value))
96}