DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/TreeView/
RegisterTreeViewProvider.rs1use serde_json::json;
5use tonic::{Response, Status};
6use CommonLibrary::LanguageFeature::DTO::ProviderType::ProviderType;
7
8use crate::{
9 ApplicationState::DTO::ProviderRegistrationDTO::ProviderRegistrationDTO,
10 RPC::CocoonService::{CocoonServiceImpl, TreeView::EnqueueTreeViewEmit},
11 Vine::Generated::{Empty, RegisterTreeViewProviderRequest},
12 dev_log,
13};
14
15pub async fn Fn(
16 Service:&CocoonServiceImpl,
17
18 Request:RegisterTreeViewProviderRequest,
19) -> Result<Response<Empty>, Status> {
20 dev_log!("cocoon", "[CocoonService] Registering tree view provider: {}", Request.view_id);
21
22 let Handle = Request
23 .view_id
24 .as_bytes()
25 .iter()
26 .fold(0u32, |Acc, B| Acc.wrapping_mul(31).wrapping_add(*B as u32));
27
28 let DTO = ProviderRegistrationDTO {
29 Handle,
30
31 ProviderType:ProviderType::TreeView,
32
33 Selector:json!([{ "viewId": Request.view_id }]),
34
35 SideCarIdentifier:"cocoon-main".to_string(),
36
37 ExtensionIdentifier:json!(Request.extension_id),
38
39 Options:Some(json!({ "viewId": Request.view_id })),
40 };
41
42 Service
43 .environment
44 .ApplicationState
45 .Extension
46 .ProviderRegistration
47 .RegisterProvider(Handle, DTO);
48
49 EnqueueTreeViewEmit::Fn(
50 &Service.environment.ApplicationHandle,
51 json!({ "viewId": Request.view_id, "extensionId": Request.extension_id }),
52 );
53
54 Ok(Response::new(Empty {}))
55}