summaryrefslogtreecommitdiffstats
path: root/vendor/gix-chunk/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gix-chunk/src/lib.rs')
-rw-r--r--vendor/gix-chunk/src/lib.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/vendor/gix-chunk/src/lib.rs b/vendor/gix-chunk/src/lib.rs
new file mode 100644
index 000000000..0647e320b
--- /dev/null
+++ b/vendor/gix-chunk/src/lib.rs
@@ -0,0 +1,36 @@
+//! Low-level access to reading and writing chunk file based formats.
+//!
+//! See the [git documentation](https://github.com/git/git/blob/seen/Documentation/technical/chunk-format.txt) for details.
+#![deny(missing_docs, rust_2018_idioms, unsafe_code)]
+
+/// An identifier to describe the kind of chunk, unique within a chunk file, typically in ASCII
+pub type Id = [u8; 4];
+
+/// A special value denoting the end of the chunk file table of contents.
+pub const SENTINEL: Id = [0u8; 4];
+
+///
+pub mod range {
+ use std::{convert::TryInto, ops::Range};
+
+ use crate::file;
+
+ /// Turn a u64 Range into a usize range safely, to make chunk ranges useful in memory mapped files.
+ pub fn into_usize(Range { start, end }: Range<file::Offset>) -> Option<Range<usize>> {
+ let start = start.try_into().ok()?;
+ let end = end.try_into().ok()?;
+ Some(Range { start, end })
+ }
+
+ /// Similar to [`into_usize()`], but panics assuming that the memory map couldn't be created if offsets
+ /// stored are too high.
+ ///
+ /// This is only true for correctly formed files, as it's entirely possible to provide out of bounds offsets
+ /// which are checked for separately - we wouldn't be here if that was the case.
+ pub fn into_usize_or_panic(range: Range<file::Offset>) -> Range<usize> {
+ into_usize(range).expect("memory maps can't be created if files are too large")
+ }
+}
+
+///
+pub mod file;