Skip to main content

Mountain/IPC/WindServiceHandlers/UI/
Decoration.rs

1#![allow(non_snake_case, unused_variables)]
2//! File decoration handlers (URI → badge / tooltip / colour) backing
3//! `vscode.window.registerFileDecorationProvider`. Mountain's
4//! `ApplicationState::Feature::Decorations` owns the map keyed on URI
5//! string; handlers here just read / mutate that store.
6
7use std::sync::Arc;
8
9use serde_json::{Value, json};
10
11use crate::RunTime::ApplicationRunTime::ApplicationRunTime;
12
13pub async fn DecorationsGet(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
14	let Uri = Arguments
15		.first()
16		.and_then(|V| V.as_str())
17		.ok_or("decorations:get requires uri".to_string())?;
18
19	let Decoration = RunTime.Environment.ApplicationState.Feature.Decorations.GetDecoration(Uri);
20
21	Ok(Decoration.unwrap_or(Value::Null))
22}
23
24pub async fn DecorationsGetMany(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
25	let Uris:Vec<String> = Arguments
26		.first()
27		.and_then(|V| V.as_array())
28		.map(|Arr| Arr.iter().filter_map(|U| U.as_str().map(str::to_owned)).collect())
29		.unwrap_or_default();
30
31	let mut Result = serde_json::Map::new();
32
33	for Uri in &Uris {
34		if let Some(Decoration) = RunTime.Environment.ApplicationState.Feature.Decorations.GetDecoration(Uri) {
35			Result.insert(Uri.clone(), Decoration);
36		}
37	}
38
39	Ok(Value::Object(Result))
40}
41
42pub async fn DecorationsSet(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
43	let Uri = Arguments
44		.first()
45		.and_then(|V| V.as_str())
46		.ok_or("decorations:set requires uri".to_string())?;
47
48	let Decoration = Arguments.get(1).cloned().unwrap_or(Value::Null);
49
50	RunTime
51		.Environment
52		.ApplicationState
53		.Feature
54		.Decorations
55		.SetDecoration(Uri, Decoration);
56
57	Ok(Value::Null)
58}
59
60pub async fn DecorationsClear(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
61	let Uri = Arguments
62		.first()
63		.and_then(|V| V.as_str())
64		.ok_or("decorations:clear requires uri".to_string())?;
65
66	RunTime.Environment.ApplicationState.Feature.Decorations.ClearDecoration(Uri);
67
68	Ok(Value::Null)
69}