Skip to main content

Mountain/IPC/WindServiceHandler/
Configuration.rs

1#![allow(non_snake_case)]
2
3//! Configuration domain handlers for Wind IPC.
4
5use std::sync::Arc;
6
7use serde_json::Value;
8use CommonLibrary::{Configuration::ConfigurationProvider::ConfigurationProvider, Environment::Requires::Requires};
9
10use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
11use super::{ConfigurationOverridesDTO, ConfigurationTarget};
12
13/// Handler for configuration get requests
14pub async fn handle_configuration_get(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
15	let Key = Args
16		.get(0)
17		.ok_or("Missing configuration key".to_string())?
18		.as_str()
19		.ok_or("Configuration key must be a string".to_string())?;
20
21	let Provider:Arc<dyn ConfigurationProvider> = Runtime.Environment.Require();
22
23	let ConfigValue = Provider
24		.GetConfigurationValue(Some(Key.to_string()), ConfigurationOverridesDTO::default())
25		.await
26		.map_err(|E| format!("Failed to get configuration: {}", E))?;
27
28	dev_log!("config", "get: {} = {:?}", Key, ConfigValue);
29	Ok(ConfigValue)
30}
31
32/// Handler for configuration update requests
33pub async fn handle_configuration_update(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
34	let Key = Args
35		.get(0)
36		.ok_or("Missing configuration key".to_string())?
37		.as_str()
38		.ok_or("Configuration key must be a string".to_string())?;
39
40	let ConfigValue = Args.get(1).ok_or("Missing configuration value".to_string())?.clone();
41
42	let Provider:Arc<dyn ConfigurationProvider> = Runtime.Environment.Require();
43
44	Provider
45		.UpdateConfigurationValue(
46			Key.to_string(),
47			ConfigValue,
48			ConfigurationTarget::User,
49			ConfigurationOverridesDTO::default(),
50			None,
51		)
52		.await
53		.map_err(|E| format!("Failed to update configuration: {}", E))?;
54
55	dev_log!("config", "updated: {}", Key);
56	Ok(Value::Null)
57}
58
59/// Handler for workbench configuration requests
60pub async fn handle_workbench_configuration(
61	Runtime:Arc<ApplicationRunTime>,
62	_Args:Vec<Value>,
63) -> Result<Value, String> {
64	let Provider:Arc<dyn ConfigurationProvider> = Runtime.Environment.Require();
65
66	let Config = Provider
67		.GetConfigurationValue(None, ConfigurationOverridesDTO::default())
68		.await
69		.map_err(|E| format!("Failed to get workbench configuration: {}", E))?;
70
71	dev_log!("config", "workbench config retrieved");
72	Ok(Config)
73}