use std::fs::File;
use std::io::{BufReader, BufWriter};
use thiserror::Error;
use dap::prelude::*;
#[derive(Error, Debug)]
enum MyAdapterError {
#[error("Unhandled command")]
UnhandledCommandError,
#[error("Missing command")]
MissingCommandError,
}
type DynResult<T> = std::result::Result<T, Box<dyn std::error::Error>>;
fn main() -> DynResult<()> {
let output = BufWriter::new(std::io::stdout());
let f = File::open("testinput.txt")?;
let input = BufReader::new(f);
let mut server = Server::new(input, output);
let req = match server.poll_request()? {
Some(req) => req,
None => return Err(Box::new(MyAdapterError::MissingCommandError)),
};
if let Command::Initialize(_) = req.command {
let rsp = req.success(ResponseBody::Initialize(types::Capabilities {
..Default::default()
}));
server.respond(rsp)?;
server.send_event(Event::Initialized)?;
} else {
return Err(Box::new(MyAdapterError::UnhandledCommandError));
}
let server_output = server.output.clone();
std::thread::spawn(move || {
std::thread::sleep(std::time::Duration::from_millis(500));
let mut server_output = server_output.lock().unwrap();
server_output
.send_event(Event::Capabilities(events::CapabilitiesEventBody {
..Default::default()
}))
.unwrap();
});
let _ = server.poll_request()?;
Ok(())
}