use thiserror::Error;
pub type Result<T> = std::result::Result<T, QRError>;
#[derive(Error, Debug)]
pub enum QRError {
#[error("No data provided for QR code")]
MissingData,
#[error("Data too large for QR code: data requires more capacity than available")]
DataTooLarge,
#[error("Invalid QR code version: {0}")]
InvalidVersion(u8),
#[error("Canvas dimensions too small: {width}x{height}")]
CanvasTooSmall { width: u32, height: u32 },
#[error("Invalid color format: {0}")]
InvalidColor(String),
#[error("Gradient must have at least one color stop")]
EmptyGradient,
#[error("Failed to load image: {0}")]
ImageLoadError(String),
#[error("Failed to encode image: {0}")]
ImageEncodeError(String),
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
#[error("Image processing error: {0}")]
ImageError(#[from] image::ImageError),
#[error("QR code generation failed: {0}")]
QRGenerationError(String),
#[error("SVG rendering error: {0}")]
SvgError(String),
}