#![forbid(unsafe_code)]
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("invalid input: {0}")]
InvalidInput(&'static str),
#[error("unsupported: {0}")]
Unsupported(&'static str),
}
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Dimensions {
pub width: u32,
pub height: u32,
}
pub trait Encoder {
fn encode(&self, pixels: &[u8], dims: Dimensions, out: &mut Vec<u8>) -> Result<usize>;
}
pub trait Decoder {
fn decode(&self, data: &[u8], out: &mut Vec<u8>) -> Result<Dimensions>;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn error_displays_and_dimensions_fields() {
assert!(!Error::Unsupported("x").to_string().is_empty());
assert!(!Error::InvalidInput("y").to_string().is_empty());
let d = Dimensions {
width: 1920,
height: 1080,
};
assert_eq!(d.width, 1920);
assert_eq!(d.height, 1080);
}
}