use std::io;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Error, Debug)]
pub enum Error {
#[error("I/O error: {0}")]
Io(#[from] io::Error),
#[error("PNG encoding error: {0}")]
PngEncoding(#[from] png::EncodingError),
#[error("Invalid dimensions: {width}x{height}")]
InvalidDimensions {
width: u32,
height: u32,
},
#[error("Data length mismatch: x has {x_len} elements, y has {y_len} elements")]
DataLengthMismatch {
x_len: usize,
y_len: usize,
},
#[error("Empty data provided")]
EmptyData,
#[error("Scale domain error: {0}")]
ScaleDomain(String),
#[error("Invalid color: {0}")]
InvalidColor(String),
#[error("Rendering error: {0}")]
Rendering(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_error_display() {
let err = Error::InvalidDimensions { width: 0, height: 100 };
assert!(err.to_string().contains("Invalid dimensions"));
}
#[test]
fn test_data_length_mismatch() {
let err = Error::DataLengthMismatch { x_len: 10, y_len: 20 };
assert!(err.to_string().contains("10"));
assert!(err.to_string().contains("20"));
}
}