Skip to main content

Mountain/IPC/WindServiceHandler/
Decoration.rs

1#![allow(non_snake_case)]
2
3//! Decoration domain handlers for Wind IPC.
4
5use std::sync::Arc;
6
7use serde_json::Value;
8
9use crate::RunTime::ApplicationRunTime::ApplicationRunTime;
10
11/// Return the decoration (badge, tooltip, color) for a single URI.
12pub async fn handle_decorations_get(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
13	let Uri = Args
14		.first()
15		.and_then(|V| V.as_str())
16		.ok_or("decorations:get requires uri".to_string())?;
17	let Decoration = Runtime.Environment.ApplicationState.Feature.Decorations.GetDecoration(Uri);
18	Ok(Decoration.unwrap_or(Value::Null))
19}
20
21/// Return decorations for multiple URIs in a single round-trip.
22pub async fn handle_decorations_get_many(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
23	let Uris:Vec<String> = Args
24		.first()
25		.and_then(|V| V.as_array())
26		.map(|Arr| Arr.iter().filter_map(|U| U.as_str().map(str::to_owned)).collect())
27		.unwrap_or_default();
28
29	let mut Result = serde_json::Map::new();
30	for Uri in &Uris {
31		if let Some(Decoration) = Runtime.Environment.ApplicationState.Feature.Decorations.GetDecoration(Uri) {
32			Result.insert(Uri.clone(), Decoration);
33		}
34	}
35	Ok(Value::Object(Result))
36}
37
38/// Register or override the decoration for a URI.
39pub async fn handle_decorations_set(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
40	let Uri = Args
41		.first()
42		.and_then(|V| V.as_str())
43		.ok_or("decorations:set requires uri".to_string())?;
44	let Decoration = Args.get(1).cloned().unwrap_or(Value::Null);
45	Runtime
46		.Environment
47		.ApplicationState
48		.Feature
49		.Decorations
50		.SetDecoration(Uri, Decoration);
51	Ok(Value::Null)
52}
53
54/// Remove the decoration for a URI.
55pub async fn handle_decorations_clear(Runtime:Arc<ApplicationRunTime>, Args:Vec<Value>) -> Result<Value, String> {
56	let Uri = Args
57		.first()
58		.and_then(|V| V.as_str())
59		.ok_or("decorations:clear requires uri".to_string())?;
60	Runtime.Environment.ApplicationState.Feature.Decorations.ClearDecoration(Uri);
61	Ok(Value::Null)
62}