use thiserror::Error;
#[derive(Debug, Error)]
pub enum SchemeError {
#[error("crypto error: {0}")]
Crypto(#[from] flamberge_crypto::CryptoError),
#[error("format error: {0}")]
Format(#[from] flamberge_formats::FormatError),
#[error("key error: {0}")]
Key(#[from] flamberge_keys::KeyError),
#[error("not this scheme")]
NotThisScheme,
#[error("unknown/unsupported format for extension .{0}")]
UnknownFormat(String),
#[error("no candidate key decrypted the book")]
NoKeyWorked,
#[error("DRM not initialised; open the book in its reader application first")]
DrmNotInitialised,
#[error("cannot decode a library or rented ebook (expiry is set)")]
RentalBook,
#[error("unknown Mobipocket encryption type {0}")]
UnknownEncryption(u16),
#[error("book is licensed as {0}, not a purchase")]
NotPurchased(String),
#[error("not yet implemented: {0}")]
Unimplemented(&'static str),
}