use std::error::Error;
use super::{EventName, EventData};
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct RawEvent<T>(T);
impl<T: AsRef<[u8]>> RawEvent<T> {
pub fn new(content: T) -> RawEvent<T> {
RawEvent(content)
}
fn name_size(&self) -> usize {
let mut event_name_size: [u8; 8] = [0; 8];
for (i, b) in self.0.as_ref().iter().enumerate() {
if i == 8 {
break
}
event_name_size[i] = *b;
}
usize::from_be_bytes(event_name_size)
}
pub fn name(&self) -> Result<EventName, Box<Error>> {
let name_size = self.name_size();
let raw_name = &self.0.as_ref()[8..(8 + name_size)];
let name = String::from_utf8(raw_name.to_owned())?;
Ok(EventName::new(name)?)
}
pub fn data(&self) -> EventData {
let name_size = self.name_size();
let raw_name = &self.0.as_ref()[(8 + name_size)..];
EventData(raw_name.to_owned())
}
}