Mountain/IPC/WindServiceHandler/
Decoration.rs1#![allow(non_snake_case)]
2
3use std::sync::Arc;
6
7use serde_json::Value;
8
9use crate::RunTime::ApplicationRunTime::ApplicationRunTime;
10
11pub 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
21pub 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
38pub 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
54pub 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}