Skip to main content

Mountain/RPC/CocoonService/TreeView/
RegisterTreeViewProvider.rs

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