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