Skip to main content

Mountain/IPC/WindServiceHandlers/Configuration/
Update.rs

1#![allow(unused_variables, dead_code, unused_imports)]
2
3//! Wire method: `configuration:update`.
4
5use std::sync::Arc;
6
7use serde_json::Value;
8
9use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
10
11pub async fn Fn(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
12	use CommonLibrary::{
13		Configuration::{
14			ConfigurationProvider::ConfigurationProvider,
15			DTO::{ConfigurationOverridesDTO::ConfigurationOverridesDTO, ConfigurationTarget::ConfigurationTarget},
16		},
17		Environment::Requires::Requires,
18	};
19
20	let key = Arguments
21		.get(0)
22		.ok_or("Missing configuration key".to_string())?
23		.as_str()
24		.ok_or("Configuration key must be a string".to_string())?;
25
26	let value = Arguments.get(1).ok_or("Missing configuration value".to_string())?.clone();
27
28	let provider:Arc<dyn ConfigurationProvider> = RunTime.Environment.Require();
29
30	provider
31		.UpdateConfigurationValue(
32			key.to_string(),
33			value,
34			ConfigurationTarget::User,
35			ConfigurationOverridesDTO::default(),
36			None,
37		)
38		.await
39		.map_err(|Error| format!("Failed to update configuration: {}", Error))?;
40
41	dev_log!("config", "updated: {}", key);
42
43	Ok(Value::Null)
44}