gix_pack/data/entry/
mod.rs1use crate::data::Entry;
2
3const _TYPE_EXT1: u8 = 0;
4const COMMIT: u8 = 1;
5const TREE: u8 = 2;
6const BLOB: u8 = 3;
7const TAG: u8 = 4;
8const _TYPE_EXT2: u8 = 5;
9const OFS_DELTA: u8 = 6;
10const REF_DELTA: u8 = 7;
11
12#[derive(PartialEq, Eq, Debug, Hash, Ord, PartialOrd, Clone)]
14#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
15pub struct Location {
16 pub pack_id: u32,
18 pub entry_size: usize,
20 pub pack_offset: data::Offset,
22}
23
24impl Location {
25 pub fn entry_range(&self, pack_offset: data::Offset) -> crate::data::EntryRange {
27 pack_offset..pack_offset + self.entry_size as u64
28 }
29}
30
31impl Entry {
33 pub fn checked_base_pack_offset(&self, distance: u64) -> Option<data::Offset> {
36 let pack_offset = self.data_offset - self.header_size() as u64;
37 Header::verified_base_pack_offset(pack_offset, distance)
38 }
39
40 pub fn base_pack_offset(&self, distance: u64) -> data::Offset {
46 self.checked_base_pack_offset(distance)
47 .expect("in-bound distance of deltas")
48 }
49 pub fn pack_offset(&self) -> data::Offset {
51 self.data_offset - self.header_size() as u64
52 }
53 pub fn header_size(&self) -> usize {
55 self.header.size(self.decompressed_size)
56 }
57}
58
59pub mod decode;
61
62mod header;
63pub use header::Header;
64
65use crate::data;