Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/RPC/CocoonService/TreeView/
RegisterTreeViewProvider.rs

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