use crate::bridge_adapter::BridgeAdapter;
use crate::debug_adapter::DebugAdapter;
use crate::server::config::DapConfig;
use crate::server::mode::DapMode;
pub struct DapServer {
pub config: DapConfig,
adapter: DebugAdapter,
}
impl DapServer {
pub fn new(config: DapConfig) -> anyhow::Result<Self> {
Ok(Self { config, adapter: DebugAdapter::new() })
}
pub fn run(&mut self) -> anyhow::Result<()> {
match self.config.mode {
DapMode::Native => self.adapter.run().map_err(Into::into),
DapMode::Bridge => {
tracing::info!("Starting DAP server in bridge mode");
let rt = tokio::runtime::Runtime::new()?;
rt.block_on(async {
let mut bridge = BridgeAdapter::new();
bridge.spawn_pls_dap().await?;
bridge.proxy_messages().await?;
bridge.shutdown().await?;
Ok(())
})
}
}
}
pub fn run_socket(&mut self, port: u16) -> anyhow::Result<()> {
if self.config.mode == DapMode::Bridge {
anyhow::bail!("Socket transport is not supported in bridge mode");
}
self.adapter.run_socket(port).map_err(Into::into)
}
}