use thiserror::Error;

#[derive(Debug, Error)]
pub enum BvError {
    #[error("failed to parse manifest: {0}")]
    ManifestParse(String),

    #[error("failed to parse lockfile: {0}")]
    LockfileParse(String),

    #[error("container runtime '{runtime}' not available: {reason}")]
    RuntimeNotAvailable { runtime: String, reason: String },

    #[error("runtime error: {0}")]
    RuntimeError(String),

    #[error("image layer limit exceeded: {0}")]
    LayerLimitExceeded(String),

    #[error("index error: {0}")]
    IndexError(String),

    #[error("hardware requirements not met: {0}")]
    HardwareMismatch(String),

    #[error("reference data error: {0}")]
    ReferenceDataError(String),

    #[error(transparent)]
    Io(#[from] std::io::Error),
}

pub type Result<T> = std::result::Result<T, BvError>;
