#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("network error: {0}")]
Network(String),
#[error("HTTP {status}: {message}")]
Http {
status: u16,
message: String,
},
#[error("bundle too large: {size} bytes exceeds limit of {limit} bytes")]
BundleTooLarge {
size: u64,
limit: u64,
},
#[error("signature verification failed: {0}")]
Signature(String),
#[error("extraction failed: {0}")]
Extraction(String),
#[error("invalid manifest: {0}")]
InvalidManifest(String),
#[error("version error: {0}")]
Version(String),
#[error("configuration error: {0}")]
Config(String),
#[error("no pending update — call check first")]
NoPending,
#[error("insecure URL rejected: {0} (set require_https = false to allow)")]
InsecureUrl(String),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("serialization error: {0}")]
Serialization(String),
#[error("internal state error: lock poisoned")]
LockPoisoned,
}
impl serde::Serialize for Error {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(&self.to_string())
}
}
pub type Result<T> = std::result::Result<T, Error>;