DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/Initialization/
InitExtensionHost.rs1use tonic::{Response, Status};
6
7use crate::{
8 ApplicationState::DTO::WorkspaceFolderStateDTO::WorkspaceFolderStateDTO,
9 RPC::CocoonService::CocoonServiceImpl,
10 Vine::Generated::{Empty, InitExtensionHostRequest},
11 dev_log,
12};
13
14pub async fn Fn(Service:&CocoonServiceImpl, Request:InitExtensionHostRequest) -> Result<Response<Empty>, Status> {
15 dev_log!(
16 "cocoon",
17 "[CocoonService] Initializing extension host with {} workspace folders",
18 Request.workspace_folders.len()
19 );
20
21 for Folder in &Request.workspace_folders {
22 dev_log!(
23 "cocoon",
24 "[CocoonService] Workspace folder: {} ({})",
25 Folder.name,
26 Folder.uri.as_ref().map(|U| &U.value).unwrap_or(&String::new())
27 );
28 }
29
30 dev_log!("cocoon", "[CocoonService] Configuration: {} keys", Request.configuration.len());
31
32 let Folders:Vec<WorkspaceFolderStateDTO> = Request
33 .workspace_folders
34 .iter()
35 .enumerate()
36 .filter_map(|(Index, F)| {
37 let URI = F.uri.as_ref().map(|U| U.value.as_str()).unwrap_or("");
38 url::Url::parse(URI)
39 .ok()
40 .and_then(|Parsed| WorkspaceFolderStateDTO::New(Parsed, F.name.clone(), Index).ok())
41 })
42 .collect();
43
44 if !Folders.is_empty() {
45 Service.environment.ApplicationState.Workspace.SetWorkspaceFolders(Folders);
46
47 dev_log!(
48 "cocoon",
49 "[CocoonService] Workspace folders stored: {}",
50 Request.workspace_folders.len()
51 );
52 }
53
54 Ok(Response::new(Empty {}))
55}