DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/Provider/
ProvideSelectionRanges.rs1use tonic::{Response, Status};
5use url::Url;
6use CommonLibrary::LanguageFeature::{
7 DTO::PositionDTO::PositionDTO,
8 LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
9};
10
11use crate::{
12 RPC::CocoonService::CocoonServiceImpl,
13 Vine::Generated::{ProvideSelectionRangesRequest, ProvideSelectionRangesResponse},
14 dev_log,
15};
16
17pub async fn Fn(
18 Service:&CocoonServiceImpl,
19
20 Request:ProvideSelectionRangesRequest,
21) -> Result<Response<ProvideSelectionRangesResponse>, Status> {
22 dev_log!("cocoon", "[CocoonService] Providing selection ranges");
23
24 let URI = Request.uri.as_ref().map(|U| U.value.as_str()).unwrap_or("");
25
26 let DocumentURI = Url::parse(URI).map_err(|E| Status::invalid_argument(format!("Invalid URI: {}", E)))?;
27
28 let PositionDTOs:Vec<PositionDTO> = Request
29 .positions
30 .iter()
31 .map(|P| PositionDTO { LineNumber:P.line, Column:P.character })
32 .collect();
33
34 match Service.environment.ProvideSelectionRanges(DocumentURI, PositionDTOs).await {
35 Ok(_) => Ok(Response::new(ProvideSelectionRangesResponse::default())),
36
37 Err(Error) => Err(Status::internal(format!("Selection ranges failed: {}", Error))),
38 }
39}