refactor server message handling

This commit is contained in:
Dmitry Sharshakov 2021-08-13 21:32:39 +03:00 committed by Blaž Hrastnik
parent 541f7a0514
commit 9678df1c62

View File

@ -167,36 +167,51 @@ async fn process_server_message(
client_tx: &UnboundedSender<Payload>,
msg: Payload,
) -> Result<()> {
let (id, result) = match msg {
match msg {
Payload::Response(Response {
success: true,
seq,
ref success,
ref seq,
request_seq,
ref command,
ref message,
ref body,
..
}) => {
info!("<- DAP success ({}, in response to {})", seq, request_seq);
if let Payload::Response(val) = msg {
(request_seq, Ok(val))
} else {
unreachable!();
}
}
Payload::Response(Response {
success: false,
message,
body,
request_seq,
command,
..
}) => {
error!(
"<- DAP error {:?} ({:?}) for command #{} {}",
message, body, request_seq, command
);
(
request_seq,
Err(Error::Other(anyhow::format_err!("{:?}", body))),
)
let result = match success {
true => {
info!("<- DAP success ({}, in response to {})", seq, request_seq);
if let Payload::Response(val) = msg {
Ok(val)
} else {
unreachable!();
}
}
false => {
error!(
"<- DAP error {:?} ({:?}) for command #{} {}",
message, body, request_seq, command
);
Err(Error::Other(anyhow::format_err!("{:?}", body)))
}
};
let tx = self
.pending_requests
.lock()
.await
.remove(&request_seq)
.expect("pending_request with id not found!");
match tx.send(result).await {
Ok(_) => (),
Err(_) => error!(
"Tried sending response into a closed channel (id={:?}), original request likely timed out",
request_seq
),
};
Ok(())
}
Payload::Request(Request {
ref command,
@ -205,33 +220,16 @@ async fn process_server_message(
}) => {
info!("<- DAP request {} #{}", command, seq);
client_tx.send(msg).expect("Failed to send");
return Ok(());
Ok(())
}
Payload::Event(Event {
ref event, ref seq, ..
}) => {
info!("<- DAP event {} #{}", event, seq);
client_tx.send(msg).expect("Failed to send");
return Ok(());
Ok(())
}
};
let tx = self
.pending_requests
.lock()
.await
.remove(&id)
.expect("pending_request with id not found!");
match tx.send(result).await {
Ok(_) => (),
Err(_) => error!(
"Tried sending response into a closed channel (id={:?}), original request likely timed out",
id
),
};
Ok(())
}
}
async fn recv(