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	let Decoration = RunTime.Environment.ApplicationState.Feature.Decorations.GetDecoration(Uri);
19	Ok(Decoration.unwrap_or(Value::Null))
20}
21
22pub async fn DecorationsGetMany(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
23	let Uris:Vec<String> = Arguments
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
38pub async fn DecorationsSet(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
39	let Uri = Arguments
40		.first()
41		.and_then(|V| V.as_str())
42		.ok_or("decorations:set requires uri".to_string())?;
43	let Decoration = Arguments.get(1).cloned().unwrap_or(Value::Null);
44	RunTime
45		.Environment
46		.ApplicationState
47		.Feature
48		.Decorations
49		.SetDecoration(Uri, Decoration);
50	Ok(Value::Null)
51}
52
53pub async fn DecorationsClear(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
54	let Uri = Arguments
55		.first()
56		.and_then(|V| V.as_str())
57		.ok_or("decorations:clear requires uri".to_string())?;
58	RunTime.Environment.ApplicationState.Feature.Decorations.ClearDecoration(Uri);
59	Ok(Value::Null)
60}