DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindServiceHandlers/Configuration/
Update.rs1use std::sync::Arc;
4
5use serde_json::Value;
6
7use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, dev_log};
8
9pub async fn Fn(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
10 use CommonLibrary::{
11 Configuration::{
12 ConfigurationProvider::ConfigurationProvider,
13 DTO::{ConfigurationOverridesDTO::ConfigurationOverridesDTO, ConfigurationTarget::ConfigurationTarget},
14 },
15 Environment::Requires::Requires,
16 };
17
18 let key = Arguments
19 .get(0)
20 .ok_or("Missing configuration key".to_string())?
21 .as_str()
22 .ok_or("Configuration key must be a string".to_string())?;
23
24 let value = Arguments.get(1).ok_or("Missing configuration value".to_string())?.clone();
25
26 let provider:Arc<dyn ConfigurationProvider> = RunTime.Environment.Require();
27
28 provider
29 .UpdateConfigurationValue(
30 key.to_string(),
31 value,
32 ConfigurationTarget::User,
33 ConfigurationOverridesDTO::default(),
34 None,
35 )
36 .await
37 .map_err(|Error| format!("Failed to update configuration: {}", Error))?;
38
39 dev_log!("config", "updated: {}", key);
40
41 let _ = crate::Vine::Client::SendNotification::Fn(
46 "cocoon-main".to_string(),
47 "configuration.change".to_string(),
48 serde_json::json!({ "keys": [key] }),
49 )
50 .await;
51
52 Ok(Value::Null)
53}