use std::path::PathBuf;
#[derive(Debug, thiserror::Error)]
pub enum ExtractError {
#[error("extract io error: {0}")]
Io(String),
#[error("tarball at `{path}` is {actual} bytes, exceeds limit {limit}")]
TarballTooLarge {
path: PathBuf,
actual: u64,
limit: u64,
},
#[error("tarball entry count exceeds limit {limit}")]
TooManyEntries {
limit: u64,
},
#[error("entry `{path}` size {actual} exceeds per-entry limit {limit}")]
EntryTooLarge {
path: String,
actual: u64,
limit: u64,
},
#[error("total extracted size exceeds limit {limit}")]
ExtractedTooLarge {
limit: u64,
},
#[error("entry path `{path}` rejected: {reason}")]
UnsafePath {
path: String,
reason: &'static str,
},
#[error("entry `{path}` rejected: type `{kind}` not allowed")]
DisallowedEntryType {
path: String,
kind: &'static str,
},
#[error(
"extracted manifest mismatch: expected id={expected_id}@{expected_version}, \
got id={got_id}@{got_version}"
)]
ManifestMismatch {
expected_id: String,
expected_version: semver::Version,
got_id: String,
got_version: semver::Version,
},
#[error("extracted manifest at `{path}` invalid: {reason}")]
ManifestInvalid {
path: PathBuf,
reason: String,
},
#[error("expected binary at `{path}` not found after extract")]
BinaryMissing {
path: PathBuf,
},
#[error("extract task panicked: {0}")]
JoinError(String),
}