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