Skip to main content

Mountain/Track/Effect/CreateEffectForRequest/
LanguageFeatures.rs

1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
4
5use CommonLibrary::{
6	Environment::Requires::Requires,
7	LanguageFeature::{
8		DTO::ProviderType::ProviderType,
9		LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
10	},
11};
12use serde_json::{Value, json};
13use tauri::Runtime;
14
15use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, Track::Effect::MappedEffectType::MappedEffect};
16
17pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
18	match MethodName {
19		"$languageFeatures:registerProvider" => {
20			let effect =
21				move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
22					Box::pin(async move {
23						let provider:Arc<dyn LanguageFeatureProviderRegistry> = run_time.Environment.Require();
24						let id = Parameters.get(0).and_then(Value::as_str).unwrap_or("").to_string();
25						let selector = Parameters.get(1).cloned().unwrap_or_default();
26						let extension_id = Parameters.get(2).cloned().unwrap_or_default();
27						let options = Parameters.get(3).cloned();
28						provider
29							.RegisterProvider(id, ProviderType::Hover, selector, extension_id, options)
30							.await
31							.map(|handle| json!(handle))
32							.map_err(|e| e.to_string())
33					})
34				};
35			Some(Ok(Box::new(effect)))
36		},
37
38		_ => None,
39	}
40}