From b3be6b269aaf8b81d74ca4f0001254d8a17a6c76 Mon Sep 17 00:00:00 2001 From: Dmitry Sharshakov Date: Sat, 14 Aug 2021 09:25:44 +0300 Subject: [PATCH] dap-basic: parse stop event --- helix-dap/examples/dap-basic.rs | 6 ++++-- helix-dap/src/client.rs | 12 ++++++++++++ helix-dap/src/lib.rs | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/helix-dap/examples/dap-basic.rs b/helix-dap/examples/dap-basic.rs index 3331c6bba..eef64be32 100644 --- a/helix-dap/examples/dap-basic.rs +++ b/helix-dap/examples/dap-basic.rs @@ -1,4 +1,4 @@ -use helix_dap::{Client, Event, OutputEventBody, Result, SourceBreakpoint}; +use helix_dap::{Client, Event, OutputEventBody, Result, SourceBreakpoint, StoppedEventBody}; use serde::{Deserialize, Serialize}; use serde_json::from_value; use tokio::sync::mpsc::Receiver; @@ -75,7 +75,9 @@ pub async fn main() -> Result<()> { println!("configurationDone: {:?}", client.configuration_done().await); - println!("stopped: {:?}", stopped_event.recv().await); + let stop: StoppedEventBody = + from_value(stopped_event.recv().await.unwrap().body.unwrap()).unwrap(); + println!("stopped: {:?}", stop); println!("threads: {:#?}", client.threads().await); let bt = client.stack_trace(1).await.expect("expected stack trace"); diff --git a/helix-dap/src/client.rs b/helix-dap/src/client.rs index ef7bb1530..a12238ae7 100644 --- a/helix-dap/src/client.rs +++ b/helix-dap/src/client.rs @@ -267,6 +267,18 @@ pub struct OutputEventBody { pub data: Option, } +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct StoppedEventBody { + pub reason: String, + pub description: Option, + pub thread_id: Option, + pub preserve_focus_hint: Option, + pub text: Option, + pub all_threads_stopped: Option, + pub hit_breakpoint_ids: Option>, +} + #[derive(Debug)] pub struct Client { id: usize, diff --git a/helix-dap/src/lib.rs b/helix-dap/src/lib.rs index 408f4d3d9..87eea8e46 100644 --- a/helix-dap/src/lib.rs +++ b/helix-dap/src/lib.rs @@ -1,7 +1,7 @@ mod client; mod transport; -pub use client::{Breakpoint, Client, OutputEventBody, SourceBreakpoint}; +pub use client::{Breakpoint, Client, OutputEventBody, SourceBreakpoint, StoppedEventBody}; pub use transport::{Event, Payload, Request, Response, Transport}; use thiserror::Error;