use crate::access::Opcode;
pub mod config;
pub mod generics;
pub mod lighting;
pub mod sensors;
pub mod state;
pub mod time;
pub enum MessagePackError {
SmallBuffer,
BadLength,
BadBytes,
BadState,
}
pub trait PackableMessage: Sized {
fn opcode() -> Opcode;
fn message_size(&self) -> usize;
fn pack_into(&self, buffer: &mut [u8]) -> Result<(), MessagePackError>;
fn pack_with_opcode(&self, buffer: &mut [u8]) -> Result<(), MessagePackError> {
let opcode = Self::opcode();
let opcode_len = opcode.byte_len();
self.pack_into(&mut buffer[opcode_len..opcode_len + self.message_size()])?;
opcode
.pack_into(&mut buffer[..opcode_len])
.expect("incorrectly formatted opcode");
Ok(())
}
fn unpack_from(buffer: &[u8]) -> Result<Self, MessagePackError>;
}