Skip to main content

Mountain/RPC/CocoonService/TreeView/
RegisterTreeViewProvider.rs

1#![allow(non_snake_case)]
2
3//! Register a Cocoon-contributed tree-view provider in `ApplicationState`
4//! and notify Sky via the coalesced `EnqueueTreeViewEmit` batcher.
5
6use 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}