use std::{error::Error, io::Write};
use super::Link;
pub struct DebugLink<W: Write> {
writer: W,
last_msg_id: u8,
is_open: bool,
}
impl<W: Write> DebugLink<W> {
pub fn new(writer: W) -> Self {
Self {
writer,
last_msg_id: 0,
is_open: false,
}
}
}
impl<W: Write + Send> Link for DebugLink<W> {
fn open(&mut self) -> Result<(), Box<dyn Error>> {
self.writer.write_all(b"Call open()\n")?;
self.is_open = true;
Ok(())
}
fn close(&mut self) -> Result<(), Box<dyn Error>> {
self.writer.write_all(b"Call close()\n")?;
self.is_open = false;
Ok(())
}
fn send(&mut self, data: &[u8]) -> Result<(), Box<dyn Error>> {
self.last_msg_id = data[0];
self.writer.write_all(b"Header:\n")?;
self.writer
.write_fmt(format_args!("\t msg_id: {:x}\n", self.last_msg_id))?;
Ok(())
}
fn read(&mut self, data: &mut [u8], _buffer_len: usize) -> Result<(), Box<dyn Error>> {
for i in data.iter_mut() {
*i = self.last_msg_id;
}
Ok(())
}
fn is_open(&self) -> bool {
self.is_open
}
}