1use std::ops::DerefMut;
2
3use git_object::Kind;
4
5pub trait DecodeEntry {
9 fn put(&mut self, pack_id: u32, offset: u64, data: &[u8], kind: git_object::Kind, compressed_size: usize);
13 fn get(&mut self, pack_id: u32, offset: u64, out: &mut Vec<u8>) -> Option<(git_object::Kind, usize)>;
16}
17
18#[derive(Default)]
20pub struct Never;
21
22impl DecodeEntry for Never {
23 fn put(&mut self, _pack_id: u32, _offset: u64, _data: &[u8], _kind: git_object::Kind, _compressed_size: usize) {}
24 fn get(&mut self, _pack_id: u32, _offset: u64, _out: &mut Vec<u8>) -> Option<(git_object::Kind, usize)> {
25 None
26 }
27}
28
29impl<T: DecodeEntry + ?Sized> DecodeEntry for Box<T> {
30 fn put(&mut self, pack_id: u32, offset: u64, data: &[u8], kind: Kind, compressed_size: usize) {
31 self.deref_mut().put(pack_id, offset, data, kind, compressed_size)
32 }
33
34 fn get(&mut self, pack_id: u32, offset: u64, out: &mut Vec<u8>) -> Option<(Kind, usize)> {
35 self.deref_mut().get(pack_id, offset, out)
36 }
37}
38
39pub trait Object {
41 fn put(&mut self, id: git_hash::ObjectId, kind: git_object::Kind, data: &[u8]);
43
44 fn get(&mut self, id: &git_hash::ObjectId, out: &mut Vec<u8>) -> Option<git_object::Kind>;
46}
47
48#[cfg(any(feature = "pack-cache-lru-dynamic", feature = "pack-cache-lru-static"))]
50pub mod lru;
51
52pub mod object;
53
54pub(crate) mod delta;