on master help sign in
refactor server message handling
commit9678df1c62cc3ff7f1efc3800f43f83069d2c6ef authorDmitry Sharshakov <d3dx12.xx@gmail.com> dateFri 13 Aug 2021, 21:32 (5 years ago) parent541f7a0
1 file changed+44−46
helix-dap/src/transport.rs+44−46
helix-dap/src/transport.rs+44−46
@@ -167,36 +167,51 @@ impl Transport {
167167 client_tx: &UnboundedSender<Payload>,
168168 msg: Payload,
169169 ) -> Result<()> {
170− let (id, result) = match msg {
170+ match msg {
171171 Payload::Response(Response {
172− success: true,
173− seq,
174− request_seq,
175− ..
176− }) => {
177− info!("<- DAP success ({}, in response to {})", seq, request_seq);
178− if let Payload::Response(val) = msg {
179− (request_seq, Ok(val))
180− } else {
181− unreachable!();
182− }
183− }
184− Payload::Response(Response {
185− success: false,
186− message,
187− body,
172+ ref success,
173+ ref seq,
188174 request_seq,
189− command,
175+ ref command,
176+ ref message,
177+ ref body,
190178 ..
191179 }) => {
192− error!(
193− "<- DAP error {:?} ({:?}) for command #{} {}",
194− message, body, request_seq, command
195− );
196− (
197− request_seq,
198− Err(Error::Other(anyhow::format_err!("{:?}", body))),
199− )
180+ let result = match success {
181+ true => {
182+ info!("<- DAP success ({}, in response to {})", seq, request_seq);
183+ if let Payload::Response(val) = msg {
184+ Ok(val)
185+ } else {
186+ unreachable!();
187+ }
188+ }
189+ false => {
190+ error!(
191+ "<- DAP error {:?} ({:?}) for command #{} {}",
192+ message, body, request_seq, command
193+ );
194+
195+ Err(Error::Other(anyhow::format_err!("{:?}", body)))
196+ }
197+ };
198+
199+ let tx = self
200+ .pending_requests
201+ .lock()
202+ .await
203+ .remove(&request_seq)
204+ .expect("pending_request with id not found!");
205+
206+ match tx.send(result).await {
207+ Ok(_) => (),
208+ Err(_) => error!(
209+ "Tried sending response into a closed channel (id={:?}), original request likely timed out",
210+ request_seq
211+ ),
212+ };
213+
214+ Ok(())
200215 }
201216 Payload::Request(Request {
202217 ref command,
@@ -205,33 +220,16 @@ impl Transport {
205220 }) => {
206221 info!("<- DAP request {} #{}", command, seq);
207222 client_tx.send(msg).expect("Failed to send");
208− return Ok(());
223+ Ok(())
209224 }
210225 Payload::Event(Event {
211226 ref event, ref seq, ..
212227 }) => {
213228 info!("<- DAP event {} #{}", event, seq);
214229 client_tx.send(msg).expect("Failed to send");
215− return Ok(());
230+ Ok(())
216231 }
217− };
218−
219− let tx = self
220− .pending_requests
221− .lock()
222− .await
223− .remove(&id)
224− .expect("pending_request with id not found!");
225−
226− match tx.send(result).await {
227− Ok(_) => (),
228− Err(_) => error!(
229− "Tried sending response into a closed channel (id={:?}), original request likely timed out",
230− id
231− ),
232− };
233−
234− Ok(())
232+ }
235233 }
236234
237235 async fn recv(