Skip to main content

Mountain/RPC/CocoonService/Debug/
RegisterDebugAdapter.rs

1#![allow(non_snake_case)]
2
3//! Register a Cocoon-contributed debug adapter in `ApplicationState` and
4//! notify Sky so the debug-launcher UI can light up.
5
6use serde_json::json;
7use tauri::Emitter;
8use tonic::{Response, Status};
9use CommonLibrary::LanguageFeature::DTO::ProviderType::ProviderType;
10
11use crate::{
12	ApplicationState::DTO::ProviderRegistrationDTO::ProviderRegistrationDTO,
13	RPC::CocoonService::CocoonServiceImpl,
14	Vine::Generated::{Empty, RegisterDebugAdapterRequest},
15	dev_log,
16};
17
18pub async fn Fn(Service:&CocoonServiceImpl, Request:RegisterDebugAdapterRequest) -> Result<Response<Empty>, Status> {
19	dev_log!("cocoon", "[CocoonService] Registering debug adapter: {}", Request.debug_type);
20
21	let Handle = Request
22		.debug_type
23		.as_bytes()
24		.iter()
25		.fold(0u32, |Acc, B| Acc.wrapping_mul(31).wrapping_add(*B as u32));
26	let DTO = ProviderRegistrationDTO {
27		Handle,
28		ProviderType:ProviderType::DebugAdapter,
29		Selector:json!([{ "debugType": Request.debug_type }]),
30		SideCarIdentifier:"cocoon-main".to_string(),
31		ExtensionIdentifier:json!(Request.extension_id),
32		Options:Some(json!({ "debugType": Request.debug_type })),
33	};
34	Service
35		.environment
36		.ApplicationState
37		.Extension
38		.ProviderRegistration
39		.RegisterProvider(Handle, DTO);
40
41	let _ = Service.environment.ApplicationHandle.emit(
42		"sky://debug/register",
43		json!({ "debugType": Request.debug_type, "extensionId": Request.extension_id }),
44	);
45
46	Ok(Response::new(Empty {}))
47}