Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/WindServiceHandlers/Configuration/
Update.rs

1//! Wire method: `configuration:update`.
2
3use 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	// Notify Cocoon so `vscode.workspace.onDidChangeConfiguration` fires
42	// for extensions that react to config changes (rust-analyzer, ESLint,
43	// Prettier, etc.). Send `keys: [key]` - the shape Configuration.ts
44	// expects to invalidate the affected cache entries. Fire-and-forget.
45	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}