Mountain/Command/LanguageFeature/
InvokeProvider.rs1#[allow(unused_imports)]
6use std::sync::Arc;
7
8use CommonLibrary::{
9 Environment::Requires::Requires,
10 Error::CommonError::CommonError,
11 LanguageFeature::LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
12};
13use serde_json::Value;
14use tauri::{AppHandle, Manager, Wry};
15
16use super::Validation::validate_language_feature_request;
17
18pub(super) async fn invoke_provider<F, T>(application_handle:AppHandle<Wry>, handler:F) -> Result<Value, String>
20where
21 F: FnOnce(Arc<dyn LanguageFeatureProviderRegistry>) -> T,
22 T: std::future::Future<Output = Result<Value, CommonError>>, {
23 let run_time = application_handle
24 .state::<Arc<crate::RunTime::ApplicationRunTime::ApplicationRunTime>>()
25 .inner()
26 .clone();
27
28 let provider:Arc<dyn LanguageFeatureProviderRegistry> = run_time.Environment.Require();
29
30 let result = handler(provider).await.map_err(|error| error.to_string())?;
31
32 serde_json::to_value(result).map_err(|error| error.to_string())
33}