diff --git a/db/src/lib.rs b/db/src/lib.rs index 8d72543..bab1a40 100644 --- a/db/src/lib.rs +++ b/db/src/lib.rs @@ -1,3 +1,5 @@ +use binary_loader; + struct DBHeader { magic: u8, major_version: u8, // actually u4 in data @@ -9,20 +11,12 @@ struct DBHeader { impl DBHeader { fn from(raw: [u8; 8]) -> DBHeader { - let mut reserved : u16 = 0x0000; - reserved = raw[2].into(); - reserved <<= 8; - let temp : u16 = raw[3].into(); - reserved |= temp; - - let mut record_count : u32 = 0x00000000; - DBHeader { - magic: raw[0], - major_version: (raw[1] | 0xF0) >> 4, - minor_version: (raw[1] | 0x0F), - reserved: reserved, - record_count: record_count, + magic: binary_loader::load_u8(&raw[0]), + major_version: binary_loader::load_high_u4(&raw[1]), + minor_version: binary_loader::load_low_u4(&raw[1]), + reserved: binary_loader::load_u16(&raw[2..4]), + record_count: binary_loader::load_u32(&raw[4..8]), } } } @@ -40,6 +34,7 @@ struct Field { #[cfg(test)] mod tests { + use super::*; #[test] fn it_works() { assert_eq!(2 + 2, 4); @@ -50,5 +45,10 @@ mod tests { let header = [0xDB, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]; let db_header = DBHeader::from(header); assert_eq!(db_header.magic, 0xDB); + assert_eq!(db_header.major_version, 0); + assert_eq!(db_header.minor_version, 1); + assert_eq!(db_header.reserved, 0); + assert_eq!(db_header.record_count, 0); + } }