use thiserror::Error;

#[derive(Debug, Error)]
pub enum Error {
    #[error("IO error: {0}")]
    Io(#[from] std::io::Error),
    #[error("Zip error: {0}")]
    Zip(#[from] zip::result::ZipError),
    #[error("JSON error: {0}")]
    Json(#[from] serde_json::Error),
    #[error("Weir error: {0}")]
    Weir(#[from] crate::weir::Error),
    #[error("Missing manifest file '{0}'.")]
    MissingManifest(&'static str),
    #[error("Manifest field '{0}' is missing.")]
    MissingManifestField(&'static str),
    #[error("Manifest field '{0}' must be a string.")]
    InvalidManifestFieldType(&'static str),
    #[error("Duplicate manifest file '{0}'.")]
    DuplicateManifest(&'static str),
    #[error("Invalid rule filename '{0}'.")]
    InvalidRuleFileName(String),
    #[error("The Rune dictionary is not valid.")]
    InvalidDictionaryFormat,
}
