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