heddle_object_model/compact/
mod.rs1mod blob;
5mod dictionary;
6mod extract;
7mod io;
8mod limits;
9mod state;
10mod state_decode;
11mod tree;
12
13pub use blob::{decode_blob_frame, encode_blob_frame, is_blob_frame};
14pub use extract::extract_state;
15pub use state::{encode_state_frame, is_state_frame};
16pub use state_decode::decode_state_frame;
17use thiserror::Error;
18pub use tree::{
19 decode_tree_frame, encode_tree_frame, encoded_tree_size, extract_tree, is_tree_frame,
20};
21
22#[derive(Debug, Error)]
24pub enum CompactError {
25 #[error("invalid compact frame: {0}")]
27 Invalid(String),
28 #[error("compact frame does not contain the requested object")]
30 Missing,
31 #[error(transparent)]
33 Tree(#[from] crate::object::TreeError),
34 #[error("invalid compact git object id: {0}")]
36 GitObjectId(String),
37 #[error("invalid compact spool id: {0}")]
39 SpoolId(String),
40 #[error(transparent)]
42 MessagePackEncode(#[from] rmp_serde::encode::Error),
43 #[error(transparent)]
45 MessagePackDecode(#[from] rmp_serde::decode::Error),
46}
47
48pub(crate) type Result<T> = std::result::Result<T, CompactError>;
49
50pub(crate) fn invalid(message: impl Into<String>) -> CompactError {
51 CompactError::Invalid(message.into())
52}
53
54#[cfg(test)]
55mod hostile;
56#[cfg(test)]
57mod tests;