Mountain/IPC/WindServiceHandlers/UI/
DecorationsGet.rs1#![allow(unused_variables)]
2
3use std::sync::Arc;
8
9use serde_json::Value;
10use CommonLibrary::LanguageFeature::LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry;
11
12use crate::RunTime::ApplicationRunTime::ApplicationRunTime;
13
14pub async fn Fn(RunTime:Arc<ApplicationRunTime>, Arguments:Vec<Value>) -> Result<Value, String> {
15 let Uri = Arguments
16 .first()
17 .and_then(|V| V.as_str())
18 .ok_or("decorations:get requires uri".to_string())?;
19
20 if let Some(Cached) = RunTime.Environment.ApplicationState.Feature.Decorations.GetDecoration(Uri) {
21 return Ok(Cached);
22 }
23
24 if let Ok(ParsedUri) = url::Url::parse(Uri) {
25 match RunTime.Environment.ProvideFileDecoration(ParsedUri).await {
26 Ok(Some(Result)) => {
27 RunTime
28 .Environment
29 .ApplicationState
30 .Feature
31 .Decorations
32 .SetDecoration(Uri, Result.clone());
33 return Ok(Result);
34 },
35 Ok(None) => {},
36 Err(E) => {
37 crate::dev_log!("decorations", "warn: [DecorationsGet] provider error for {}: {}", Uri, E);
38 },
39 }
40 }
41
42 Ok(Value::Null)
43}