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