use crate::byte_utils::as_u32_le;
use crate::db_parser::models::common_event::CommonEvent;
use std::fs;
use std::path::Path;
use crate::db_parser::COMMON_EVENTS_MAGIC;
pub fn parse(data: &Path) -> std::io::Result<Vec<CommonEvent>> {
match fs::read(data) {
Ok(contents) => {
Ok(parse_bytes(&contents))
}
Err(e) => {
Err(e)
}
}
}
pub fn parse_bytes(bytes: &[u8]) -> Vec<CommonEvent> {
let mut offset: usize = 0;
let signature: &[u8] = &bytes[offset..][..11];
offset += 11;
if signature != COMMON_EVENTS_MAGIC {
panic!("Invalid common events header.");
}
let event_count: usize = as_u32_le(&bytes[offset..offset+4]) as usize;
offset += 4;
let mut events: Vec<CommonEvent> = vec![];
for _ in 0..event_count {
let (bytes_read, event): (usize, CommonEvent)
= CommonEvent::parse(&bytes[offset..]);
offset += bytes_read;
events.push(event);
};
events
}