Skip to main content

heddle_object_model/compact/
mod.rs

1// SPDX-License-Identifier: Apache-2.0
2//! Lossless columnar encodings used by background compact repacks.
3
4mod blob;
5mod dictionary;
6mod io;
7mod state;
8mod state_decode;
9mod tree;
10
11pub use blob::{decode_blob_frame, encode_blob_frame, is_blob_frame};
12pub use state::{encode_state_frame, is_state_frame};
13pub use state_decode::decode_state_frame;
14use thiserror::Error;
15pub use tree::{decode_tree_frame, encode_tree_frame, encoded_tree_size, is_tree_frame};
16
17/// Compact metadata encoding failure.
18#[derive(Debug, Error)]
19pub enum CompactError {
20    /// The frame is malformed, truncated, or internally inconsistent.
21    #[error("invalid compact frame: {0}")]
22    Invalid(String),
23    /// A decoded tree violates the native tree invariants.
24    #[error(transparent)]
25    Tree(#[from] crate::object::TreeError),
26    /// A decoded Git object id is invalid.
27    #[error("invalid compact git object id: {0}")]
28    GitObjectId(String),
29    /// A decoded spool id is invalid.
30    #[error("invalid compact spool id: {0}")]
31    SpoolId(String),
32    /// A compact verification value cannot be serialized losslessly.
33    #[error(transparent)]
34    MessagePackEncode(#[from] rmp_serde::encode::Error),
35    /// A compact verification value cannot be deserialized losslessly.
36    #[error(transparent)]
37    MessagePackDecode(#[from] rmp_serde::decode::Error),
38}
39
40pub(crate) type Result<T> = std::result::Result<T, CompactError>;
41
42pub(crate) fn invalid(message: impl Into<String>) -> CompactError {
43    CompactError::Invalid(message.into())
44}
45
46#[cfg(test)]
47mod tests;