mod blob;
mod dictionary;
mod extract;
mod io;
mod limits;
mod state;
mod state_decode;
mod tree;
pub use blob::{decode_blob_frame, encode_blob_frame, is_blob_frame};
pub use extract::extract_state;
pub use state::{encode_state_frame, is_state_frame};
pub use state_decode::decode_state_frame;
use thiserror::Error;
pub use tree::{
decode_tree_frame, encode_tree_frame, encoded_tree_size, extract_tree, is_tree_frame,
};
#[derive(Debug, Error)]
pub enum CompactError {
#[error("invalid compact frame: {0}")]
Invalid(String),
#[error("compact frame does not contain the requested object")]
Missing,
#[error(transparent)]
Tree(#[from] crate::object::TreeError),
#[error("invalid compact git object id: {0}")]
GitObjectId(String),
#[error("invalid compact spool id: {0}")]
SpoolId(String),
#[error(transparent)]
MessagePackEncode(#[from] rmp_serde::encode::Error),
#[error(transparent)]
MessagePackDecode(#[from] rmp_serde::decode::Error),
}
pub(crate) type Result<T> = std::result::Result<T, CompactError>;
pub(crate) fn invalid(message: impl Into<String>) -> CompactError {
CompactError::Invalid(message.into())
}
#[cfg(test)]
mod hostile;
#[cfg(test)]
mod tests;