(file: &mut File, latest_version_file: &mut File, dir: &Path)
| 189 | } |
| 190 | |
| 191 | fn read_node(file: &mut File, latest_version_file: &mut File, dir: &Path) -> io::Result<Node> { |
| 192 | let mut level = [0u8; 1]; |
| 193 | file.read_exact(&mut level)?; |
| 194 | let level = level[0]; |
| 195 | |
| 196 | let mut version_buffer = [0u8; 4]; |
| 197 | file.read_exact(&mut version_buffer)?; |
| 198 | let version = u32::from_le_bytes(version_buffer); |
| 199 | |
| 200 | let mut prop_buffer = [0u8; 8]; |
| 201 | file.read_exact(&mut prop_buffer)?; |
| 202 | let prop_offset = u32::from_le_bytes(prop_buffer[0..4].try_into().unwrap()); |
| 203 | let prop_length = u32::from_le_bytes(prop_buffer[4..8].try_into().unwrap()); |
| 204 | |
| 205 | let mut metadata_buffer = [0u8; 8]; |
| 206 | file.read_exact(&mut metadata_buffer)?; |
| 207 | let metadata_offset = u32::from_le_bytes(metadata_buffer[0..4].try_into().unwrap()); |
| 208 | let metadata_length = u32::from_le_bytes(metadata_buffer[4..8].try_into().unwrap()); |
| 209 | |
| 210 | let mut parent_latest_buffer = [0u8; 4]; |
| 211 | file.read_exact(&mut parent_latest_buffer)?; |
| 212 | let parent_latest_offset = u32::from_le_bytes(parent_latest_buffer); |
| 213 | let parent_ptr = resolve_latest_ptr(latest_version_file, parent_latest_offset)?; |
| 214 | let parent_validation = parent_ptr.validate_link(dir); |
| 215 | |
| 216 | let mut child_latest_buffer = [0u8; 4]; |
| 217 | file.read_exact(&mut child_latest_buffer)?; |
| 218 | let child_latest_offset = u32::from_le_bytes(child_latest_buffer); |
| 219 | let child_ptr = resolve_latest_ptr(latest_version_file, child_latest_offset)?; |
| 220 | let child_validation = child_ptr.validate_link(dir); |
| 221 | |
| 222 | let neighbors = read_neighbors(file, latest_version_file, dir)?; |
| 223 | |
| 224 | Ok(Node { |
| 225 | level, |
| 226 | version, |
| 227 | prop_offset, |
| 228 | prop_length, |
| 229 | metadata_offset, |
| 230 | metadata_length, |
| 231 | parent_ptr, |
| 232 | parent_validation, |
| 233 | child_ptr, |
| 234 | child_validation, |
| 235 | neighbors, |
| 236 | }) |
| 237 | } |
| 238 | |
| 239 | fn print_index_ptr(ptr: &IndexPtr, validation: &LinkValidation, prefix: &str) { |
| 240 | if ptr.is_absent() { |
no test coverage detected