use crate::structures::common::{self, StructureError};
use std::collections::HashMap;
#[derive(Debug, Default, Clone)]
pub struct RarArchiveHeader {
pub version: usize,
}
pub fn parse_rar_archive_header(rar_data: &[u8]) -> Result<RarArchiveHeader, StructureError> {
let archive_header_structure =
vec![("magic_p1", "u32"), ("magic_p2", "u16"), ("version", "u8")];
let version_map: HashMap<usize, usize> = HashMap::from([(0, 4), (1, 5)]);
if let Ok(archive_header) = common::parse(rar_data, &archive_header_structure, "little") {
if version_map.contains_key(&archive_header["version"]) {
return Ok(RarArchiveHeader {
version: version_map[&archive_header["version"]],
});
}
}
Err(StructureError)
}