@@ -1,125 +0,0 @@
1−use helix_dap::{events, Client, Event, Payload, Result, SourceBreakpoint, ThreadId};
2−use serde::{Deserialize, Serialize};
3−use serde_json::to_value;
4−use tokio::sync::mpsc::UnboundedReceiver;
5−
6−#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
7−#[serde(rename_all = "camelCase")]
8−struct LaunchArguments {
9− mode: String,
10− program: String,
11−}
12−
13−async fn dispatch(mut rx: UnboundedReceiver<Payload>) {
14− loop {
15− match rx.recv().await.unwrap() {
16− Payload::Event(Event::Output(events::Output {
17− category, output, ..
18− })) => {
19− println!(
20− "> [{}] {}",
21− category.unwrap_or("unknown".to_owned()),
22− output
23− );
24− }
25− Payload::Event(Event::Stopped(_)) => {
26− println!("stopped");
27− }
28− _ => {}
29− };
30− }
31−}
32−
33−#[tokio::main]
34−pub async fn main() -> Result<()> {
35− let base_config = fern::Dispatch::new().level(log::LevelFilter::Info);
36−
37− let stderr_config = fern::Dispatch::new()
38− .format(|out, message, record| out.finish(format_args!("[{}] {}", record.level(), message)))
39− .chain(std::io::stderr());
40−
41− base_config
42− .chain(stderr_config)
43− .apply()
44− .expect("Failed to set up logging");
45−
46− let (mut client, events) =
47− Client::tcp_process("dlv", vec!["dap"], "-l 127.0.0.1:{}", 0).await?;
48− println!("create: {:?}", client);
49−
50− tokio::spawn(dispatch(events));
51−
52− println!("init: {:?}", client.initialize("go".to_owned()).await);
53− println!("caps: {:?}", client.capabilities());
54−
55− let args = LaunchArguments {
56− mode: "exec".to_owned(),
57− program: "/tmp/godebug/main".to_owned(),
58− };
59−
60− println!("launch: {:?}", client.launch(to_value(args)?).await);
61−
62− println!(
63− "breakpoints: {:#?}",
64− client
65− .set_breakpoints(
66− "/tmp/godebug/main.go".into(),
67− vec![SourceBreakpoint {
68− line: 8,
69− column: Some(2),
70− condition: None,
71− hit_condition: None,
72− log_message: None,
73− }]
74− )
75− .await
76− );
77−
78− let mut _in = String::new();
79− std::io::stdin()
80− .read_line(&mut _in)
81− .expect("Failed to read line");
82−
83− println!("configurationDone: {:?}", client.configuration_done().await);
84−
85− let mut _in = String::new();
86− std::io::stdin()
87− .read_line(&mut _in)
88− .expect("Failed to read line");
89−
90− let threads = client.threads().await?;
91− println!("threads: {:#?}", threads);
92− let bt = client
93− .stack_trace(threads[0].id)
94− .await
95− .expect("expected stack trace");
96− println!("stack trace: {:#?}", bt);
97− let scopes = client
98− .scopes(bt.0[0].id)
99− .await
100− .expect("expected scopes for thread");
101− println!("scopes: {:#?}", scopes);
102− println!(
103− "vars: {:#?}",
104− client.variables(scopes[1].variables_reference).await
105− );
106−
107− let mut _in = String::new();
108− std::io::stdin()
109− .read_line(&mut _in)
110− .expect("Failed to read line");
111−
112− println!(
113− "continued: {:?}",
114− client.continue_thread(ThreadId::default()).await
115− );
116−
117− let mut _in = String::new();
118− std::io::stdin()
119− .read_line(&mut _in)
120− .expect("Failed to read line");
121−
122− println!("disconnect: {:?}", client.disconnect().await);
123−
124− Ok(())
125−}