1 use crate::{extension, extension::Signature, util::read_u32}
;
3 #[derive(Debug, Clone, Copy)]
5 pub from_beginning_of_file
: u32,
9 pub const SIGNATURE
: Signature
= *b
"IEOT";
11 pub fn decode(data
: &[u8]) -> Option
<Vec
<Offset
>> {
12 let (version
, mut data
) = read_u32(data
)?
;
15 _unknown
=> return None
,
18 let entry_size
= 4 + 4;
19 let num_offsets
= data
.len() / entry_size
;
20 if num_offsets
== 0 || data
.len() % entry_size
!= 0 {
24 let mut out
= Vec
::with_capacity(entry_size
);
25 for _
in 0..num_offsets
{
26 let (offset
, chunk
) = read_u32(data
)?
;
27 let (num_entries
, chunk
) = read_u32(chunk
)?
;
29 from_beginning_of_file
: offset
,
34 debug_assert
!(data
.is_empty());
39 pub fn find(extensions
: &[u8], object_hash
: gix_hash
::Kind
) -> Option
<Vec
<Offset
>> {
40 extension
::Iter
::new_without_checksum(extensions
, object_hash
)?
41 .find_map(|(sig
, ext_data
)| (sig
== SIGNATURE
).then_some(ext_data
))