summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Sharshakov2021-08-14 06:14:05 +0000
committerBlaž Hrastnik2021-08-20 04:43:54 +0000
commit09390be6a568bcf7052c57bf10219c448413d5b0 (patch)
treedba12ddc1f7010e62e3729f8c50e5f000bea38d7
parentc72475bc3084f206c3d0c612dd86afe324c6931e (diff)
dap-basic: handle output events
-rw-r--r--helix-dap/examples/dap-basic.rs13
-rw-r--r--helix-dap/src/client.rs13
-rw-r--r--helix-dap/src/lib.rs2
3 files changed, 26 insertions, 2 deletions
diff --git a/helix-dap/examples/dap-basic.rs b/helix-dap/examples/dap-basic.rs
index 76fc0dd3..fb52f855 100644
--- a/helix-dap/examples/dap-basic.rs
+++ b/helix-dap/examples/dap-basic.rs
@@ -1,5 +1,7 @@
-use helix_dap::{Client, Result, SourceBreakpoint};
+use helix_dap::{Client, Event, OutputEventBody, Result, SourceBreakpoint};
use serde::{Deserialize, Serialize};
+use serde_json::from_value;
+use tokio::sync::mpsc::Receiver;
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
@@ -8,6 +10,12 @@ struct LaunchArguments {
program: String,
}
+async fn output(mut output_event: Receiver<Event>) {
+ let body: OutputEventBody =
+ from_value(output_event.recv().await.unwrap().body.unwrap()).unwrap();
+ println!("{:?}", body);
+}
+
#[tokio::main]
pub async fn main() -> Result<()> {
let base_config = fern::Dispatch::new().level(log::LevelFilter::Info);
@@ -25,6 +33,9 @@ pub async fn main() -> Result<()> {
println!("create: {:?}", client);
let mut client = client?;
+ let output_event = client.listen_for_event("output".to_owned()).await;
+ tokio::spawn(output(output_event));
+
println!("init: {:?}", client.initialize("go".to_owned()).await);
println!("caps: {:#?}", client.capabilities());
diff --git a/helix-dap/src/client.rs b/helix-dap/src/client.rs
index 7ce7833d..ef7bb153 100644
--- a/helix-dap/src/client.rs
+++ b/helix-dap/src/client.rs
@@ -254,6 +254,19 @@ struct VariablesResponseBody {
variables: Vec<Variable>,
}
+#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
+#[serde(rename_all = "camelCase")]
+pub struct OutputEventBody {
+ pub output: String,
+ pub category: Option<String>,
+ pub group: Option<String>,
+ pub line: Option<usize>,
+ pub column: Option<usize>,
+ pub variables_reference: Option<usize>,
+ pub source: Option<Source>,
+ pub data: Option<Value>,
+}
+
#[derive(Debug)]
pub struct Client {
id: usize,
diff --git a/helix-dap/src/lib.rs b/helix-dap/src/lib.rs
index 1e545fd8..408f4d3d 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, SourceBreakpoint};
+pub use client::{Breakpoint, Client, OutputEventBody, SourceBreakpoint};
pub use transport::{Event, Payload, Request, Response, Transport};
use thiserror::Error;