1#![cfg_attr(
11 all(doc, feature = "document-features"),
12 doc = ::document_features::document_features!()
13)]
14#![cfg_attr(all(doc, feature = "document-features"), feature(doc_cfg, doc_auto_cfg))]
15#![deny(missing_docs, rust_2018_idioms, unsafe_code)]
16
17pub mod cache;
19pub mod decode;
21pub mod fs;
22pub mod hash;
23pub mod interrupt;
24#[cfg(feature = "io-pipe")]
25pub mod io;
26pub mod parallel;
27#[cfg(feature = "progress")]
28pub mod progress;
29pub mod threading;
30pub use gix_trace as trace;
31
32#[cfg(feature = "zlib")]
34pub mod zlib;
35
36pub mod iter {
38 pub struct Chunks<I> {
41 pub inner: I,
43 pub size: usize,
45 }
46
47 impl<I, Item> Iterator for Chunks<I>
48 where
49 I: Iterator<Item = Item>,
50 {
51 type Item = Vec<Item>;
52
53 fn next(&mut self) -> Option<Self::Item> {
54 let mut res = Vec::with_capacity(self.size);
55 let mut items_left = self.size;
56 for item in &mut self.inner {
57 res.push(item);
58 items_left -= 1;
59 if items_left == 0 {
60 break;
61 }
62 }
63 (!res.is_empty()).then_some(res)
64 }
65 }
66}