1mod extension_dap_adapter;
 2mod extension_locator_adapter;
 3
 4use std::{path::Path, sync::Arc};
 5
 6use dap::DapRegistry;
 7use extension::{ExtensionDebugAdapterProviderProxy, ExtensionHostProxy};
 8use extension_dap_adapter::ExtensionDapAdapter;
 9use gpui::App;
10use util::ResultExt;
11
12use crate::extension_locator_adapter::ExtensionLocatorAdapter;
13
14pub fn init(extension_host_proxy: Arc<ExtensionHostProxy>, cx: &mut App) {
15    let language_server_registry_proxy = DebugAdapterRegistryProxy::new(cx);
16    extension_host_proxy.register_debug_adapter_proxy(language_server_registry_proxy);
17}
18
19#[derive(Clone)]
20struct DebugAdapterRegistryProxy {
21    debug_adapter_registry: DapRegistry,
22}
23
24impl DebugAdapterRegistryProxy {
25    fn new(cx: &mut App) -> Self {
26        Self {
27            debug_adapter_registry: DapRegistry::global(cx).clone(),
28        }
29    }
30}
31
32impl ExtensionDebugAdapterProviderProxy for DebugAdapterRegistryProxy {
33    fn register_debug_adapter(
34        &self,
35        extension: Arc<dyn extension::Extension>,
36        debug_adapter_name: Arc<str>,
37        schema_path: &Path,
38    ) {
39        if let Some(adapter) =
40            ExtensionDapAdapter::new(extension, debug_adapter_name, schema_path).log_err()
41        {
42            self.debug_adapter_registry.add_adapter(Arc::new(adapter));
43        }
44    }
45
46    fn register_debug_locator(
47        &self,
48        extension: Arc<dyn extension::Extension>,
49        locator_name: Arc<str>,
50    ) {
51        self.debug_adapter_registry
52            .add_locator(Arc::new(ExtensionLocatorAdapter::new(
53                extension,
54                locator_name,
55            )));
56    }
57
58    fn unregister_debug_adapter(&self, debug_adapter_name: Arc<str>) {
59        self.debug_adapter_registry
60            .remove_adapter(&debug_adapter_name);
61    }
62
63    fn unregister_debug_locator(&self, locator_name: Arc<str>) {
64        self.debug_adapter_registry.remove_locator(&locator_name);
65    }
66}