Skip to main content

Mountain/Command/LanguageFeature/
InvokeProvider.rs

1//! # LanguageFeature - Invoke Provider Helper
2//!
3//! Generic helper to reduce boilerplate in language feature command handlers.
4
5#[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
18/// A generic helper to reduce boilerplate in language feature command handlers.
19pub(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}