1#![deny(missing_docs)]
10
11pub mod assets;
12pub mod detect;
13pub mod extract;
14pub mod format;
15#[cfg(target_os = "macos")]
16pub mod macho;
17pub mod packer;
18pub mod signing;
19
20pub use detect::{detect_packed_mode, PackedMode};
21pub use format::{
22 PackFooter, PackManifest, PackMode, SectionHeader, FOOTER_SIZE, MAGIC, SECTION_HEADER_SIZE,
23 SECTION_MAGIC, SIDECAR_EXTENSION,
24};
25pub use packer::{
26 read_footer, read_footer_from_sidecar, read_manifest, read_manifest_from_sidecar,
27 sidecar_path_for, verify_sidecar_checksum, Packer,
28};
29
30use thiserror::Error;
31
32#[derive(Debug, Error)]
34pub enum PackError {
35 #[error("I/O error: {0}")]
37 Io(#[from] std::io::Error),
38
39 #[error("JSON error: {0}")]
41 Json(#[from] serde_json::Error),
42
43 #[error("invalid magic: expected SMOLPACK")]
45 InvalidMagic,
46
47 #[error("unsupported version: {0}")]
49 UnsupportedVersion(u32),
50
51 #[error("checksum mismatch: expected {expected:08x}, got {actual:08x}")]
53 ChecksumMismatch {
54 expected: u32,
56 actual: u32,
58 },
59
60 #[error("asset not found: {0}")]
62 AssetNotFound(String),
63
64 #[error("compression error: {0}")]
66 Compression(String),
67
68 #[error("signing error: {0}")]
70 Signing(String),
71
72 #[error("tar error: {0}")]
74 Tar(String),
75}
76
77pub type Result<T> = std::result::Result<T, PackError>;