use crate::ingress::ingress_manager::BUFF_SIZE;
#[derive(Copy, Clone, PartialEq, Debug)]
pub enum Type {
Unknown,
Notification,
Weather,
Date,
Music,
Application,
}
#[derive(Copy, Clone)]
pub struct Buffer {
pub btype: Type,
pub payload: [u8; BUFF_SIZE],
pub payload_idx: usize,
}
impl Default for Buffer {
fn default() -> Buffer {
Buffer {
btype: Type::Unknown,
payload: [0u8; BUFF_SIZE],
payload_idx: 0,
}
}
}
impl Buffer {
pub fn new(rx_buffer: [u8; BUFF_SIZE]) -> Self {
Buffer {
btype: Type::Unknown,
payload: rx_buffer,
payload_idx: 0,
}
}
pub fn get_type(&self) -> Type {
self.btype
}
pub fn write(&mut self, byte: u8) {
self.payload[self.payload_idx] = byte;
self.payload_idx += 1;
}
pub fn clear(&mut self) {
self.payload_idx = 0;
}
}
impl core::fmt::Debug for Buffer {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
write!(f, "Buffer<{:?}>[{}] : [", self.btype, self.payload_idx)?;
for idx in 0..self.payload_idx{
write!(f, " '{}',", self.payload[idx] as char)?;
}
write!(f, " ]")?;
Ok(())
}
}
impl core::fmt::Display for Buffer {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
for idx in 0..self.payload_idx{
write!(f, "{}", self.payload[idx] as char)?;
}
Ok(())
}
}