diff options
author | A-Walrus | 2023-04-17 20:36:04 +0000 |
---|---|---|
committer | GitHub | 2023-04-17 20:36:04 +0000 |
commit | 8839eb0af47b99511956d81a6dbb32e948d2076c (patch) | |
tree | 91c19ea13a5a7de4731c37e9cc728a30c177fb63 /helix-dap | |
parent | 1b016a89d546fb84d3c737d7c4bacb9e26c8b893 (diff) |
Fix unwrap bug in DAP (#6786)
Diffstat (limited to 'helix-dap')
-rw-r--r-- | helix-dap/src/client.rs | 10 | ||||
-rw-r--r-- | helix-dap/src/transport.rs | 46 |
2 files changed, 32 insertions, 24 deletions
diff --git a/helix-dap/src/client.rs b/helix-dap/src/client.rs index 7efb72d8..acdfc5b7 100644 --- a/helix-dap/src/client.rs +++ b/helix-dap/src/client.rs @@ -62,12 +62,10 @@ impl Client { if command.is_empty() { return Result::Err(Error::Other(anyhow!("Command not provided"))); } - if transport == "tcp" && port_arg.is_some() { - Self::tcp_process(command, args, port_arg.unwrap(), id).await - } else if transport == "stdio" { - Self::stdio(command, args, id) - } else { - Result::Err(Error::Other(anyhow!("Incorrect transport {}", transport))) + match (transport, port_arg) { + ("tcp", Some(port_arg)) => Self::tcp_process(command, args, port_arg, id).await, + ("stdio", _) => Self::stdio(command, args, id), + _ => Result::Err(Error::Other(anyhow!("Incorrect transport {}", transport))), } } diff --git a/helix-dap/src/transport.rs b/helix-dap/src/transport.rs index dd03e568..0f646b6a 100644 --- a/helix-dap/src/transport.rs +++ b/helix-dap/src/transport.rs @@ -230,38 +230,48 @@ impl Transport { } } - async fn recv( + async fn recv_inner( transport: Arc<Self>, mut server_stdout: Box<dyn AsyncBufRead + Unpin + Send>, client_tx: UnboundedSender<Payload>, - ) { + ) -> Result<()> { let mut recv_buffer = String::new(); loop { - match Self::recv_server_message(&mut server_stdout, &mut recv_buffer).await { - Ok(msg) => { - transport - .process_server_message(&client_tx, msg) - .await - .unwrap(); - } - Err(err) => { - error!("err: <- {:?}", err); - break; - } - } + let msg = Self::recv_server_message(&mut server_stdout, &mut recv_buffer).await?; + transport.process_server_message(&client_tx, msg).await?; } } - async fn send( + async fn recv( + transport: Arc<Self>, + server_stdout: Box<dyn AsyncBufRead + Unpin + Send>, + client_tx: UnboundedSender<Payload>, + ) { + if let Err(err) = Self::recv_inner(transport, server_stdout, client_tx).await { + error!("err: <- {:?}", err); + } + } + + async fn send_inner( transport: Arc<Self>, mut server_stdin: Box<dyn AsyncWrite + Unpin + Send>, mut client_rx: UnboundedReceiver<Payload>, - ) { + ) -> Result<()> { while let Some(payload) = client_rx.recv().await { transport .send_payload_to_server(&mut server_stdin, payload) - .await - .unwrap() + .await?; + } + Ok(()) + } + + async fn send( + transport: Arc<Self>, + server_stdin: Box<dyn AsyncWrite + Unpin + Send>, + client_rx: UnboundedReceiver<Payload>, + ) { + if let Err(err) = Self::send_inner(transport, server_stdin, client_rx).await { + error!("err: <- {:?}", err); } } |