Mountain/Command/LanguageFeature/
definition.rs1use CommonLibrary::{
6 Error::CommonError::CommonError,
7 LanguageFeature::{
8 DTO::PositionDTO::PositionDTO,
9 LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
10 },
11};
12use log::debug;
13use serde_json::Value;
14use tauri::{AppHandle, Wry};
15use url::Url;
16
17use super::{invoke_provider::invoke_provider, validation::validate_language_feature_request};
18
19pub(super) async fn provide_definition_impl(
22 application_handle:AppHandle<Wry>,
23 uri:String,
24 position:Value,
25) -> Result<Value, String> {
26 debug!("[Language Feature] Providing definition for: {} at {:?}", uri, position);
27
28 validate_language_feature_request("definition", &uri, &position)?;
29
30 let document_uri = Url::parse(&uri).map_err(|error| error.to_string())?;
31
32 let position_dto:PositionDTO =
33 serde_json::from_value(position.clone()).map_err(|error| format!("Failed to parse position: {}", error))?;
34
35 invoke_provider(application_handle, |provider| {
36 async move {
37 let result = provider.ProvideDefinition(document_uri, position_dto).await?;
38 Ok(serde_json::to_value(result)?)
39 }
40 })
41 .await
42}