use crate::buffer::WriteBuffer;
pub trait Sender {
fn is_logging(&self) -> bool;
fn set_logging(&mut self, enable: bool);
fn on_send(&mut self, data: &[u8]) -> usize;
fn on_send_log(&self, message: &str) {
let _ = message;
}
fn send_serialized(&mut self, data: &[u8]) -> usize {
let size = data.len();
if self.is_logging() {
self.on_send_log(&format!("Sending {} bytes", size));
}
self.on_send(data)
}
fn send<T>(&mut self, value: &T) -> usize
where
T: Serialize + std::fmt::Display,
{
let mut buffer = WriteBuffer::new();
value.serialize(&mut buffer);
if self.is_logging() {
self.on_send_log(&format!("Sending struct: {}", std::any::type_name::<T>()));
self.on_send_log(&format!("{}", value));
}
self.send_serialized(buffer.data())
}
}
pub trait Serialize {
fn serialize(&self, buffer: &mut WriteBuffer) -> usize;
}