Mountain/Command/LanguageFeature/
invoke_provider.rs

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