Skip to main content

Mountain/IPC/WindServiceHandlers/UI/
DecorationsGet.rs

1#![allow(unused_variables)]
2
3//! Wire method: `decorations:get`.
4//! Reads a URI decoration from cache, then falls back to a registered
5//! FileDecoration provider via Cocoon gRPC.
6
7use 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}