#![deny(missing_docs)]
pub mod assets;
pub mod detect;
pub mod extract;
pub mod format;
#[cfg(target_os = "macos")]
pub mod macho;
pub mod packer;
pub mod signing;
pub use detect::{detect_packed_mode, PackedMode};
pub use format::{
PackFooter, PackManifest, PackMode, SectionHeader, FOOTER_SIZE, MAGIC, SECTION_HEADER_SIZE,
SECTION_MAGIC, SIDECAR_EXTENSION,
};
pub use packer::{
read_footer, read_footer_from_sidecar, read_manifest, read_manifest_from_sidecar,
sidecar_path_for, verify_sidecar_checksum, Packer,
};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum PackError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
#[error("invalid magic: expected SMOLPACK")]
InvalidMagic,
#[error("unsupported version: {0}")]
UnsupportedVersion(u32),
#[error("checksum mismatch: expected {expected:08x}, got {actual:08x}")]
ChecksumMismatch {
expected: u32,
actual: u32,
},
#[error("asset not found: {0}")]
AssetNotFound(String),
#[error("compression error: {0}")]
Compression(String),
#[error("signing error: {0}")]
Signing(String),
#[error("tar error: {0}")]
Tar(String),
}
pub type Result<T> = std::result::Result<T, PackError>;