use thiserror::Error;
#[derive(Debug, Error)]
pub enum GatewardenError {
#[error("Configuration error: {0}")]
ConfigError(String),
#[error("Response signature or date header missing")]
SignatureMissing,
#[error("Response signature verification failed")]
SignatureInvalid,
#[error("Response digest mismatch")]
DigestMismatch,
#[error("Response too old ({age_seconds}s), possible replay attack")]
ResponseTooOld {
age_seconds: i64,
},
#[error("Response date is in the future, possible clock tampering")]
ResponseFromFuture,
#[error("Protocol error: {0}")]
ProtocolError(String),
#[error("Keygen transport error: {0}")]
KeygenTransport(String),
#[error("Cache I/O error: {0}")]
CacheIO(String),
#[error("Cache tampering detected")]
CacheTampered,
#[error("Cache expired (offline grace exceeded)")]
CacheExpired,
#[error("No license key provided")]
MissingLicense,
#[error("Invalid or expired license")]
InvalidLicense,
#[error("Required entitlement missing: {code}")]
EntitlementMissing {
code: String,
},
#[error("Usage limit exceeded")]
UsageLimitExceeded,
#[error("Meter I/O error: {0}")]
MeterIO(String),
}