pub mod aesprite;
pub mod avif;
pub mod bmp;
pub mod dds;
pub mod exr;
pub mod farbfeld;
pub mod gif;
pub mod hdr;
pub mod heif;
pub mod ico;
pub mod jpeg;
pub mod jxl;
pub mod ktx2;
pub mod png;
pub mod pnm;
pub mod psd;
pub mod qoi;
pub mod tga;
pub mod tiff;
pub mod vtf;
pub mod webp;
use crate::{ImageError, ImageResult, ImageType};
use std::io::{BufRead, Seek};
pub fn image_type<R: BufRead + Seek>(reader: &mut R) -> ImageResult<ImageType> {
let mut header = [0; 12];
reader.read_exact(&mut header)?;
if header.len() < 2 {
return Err(
std::io::Error::new(std::io::ErrorKind::UnexpectedEof, "Not enough data").into(),
);
}
if jpeg::matches(&header) {
return Ok(ImageType::Jpeg);
}
if png::matches(&header) {
return Ok(ImageType::Png);
}
if gif::matches(&header) {
return Ok(ImageType::Gif);
}
if tiff::matches(&header) {
return Ok(ImageType::Tiff);
}
if webp::matches(&header) {
return Ok(ImageType::Webp);
}
if heif::matches(&header) {
return Ok(ImageType::Heif);
}
if avif::matches(&header) {
return Ok(ImageType::Avif);
}
if jxl::matches(&header) {
return Ok(ImageType::Jxl);
}
if bmp::matches(&header) {
return Ok(ImageType::Bmp);
}
if psd::matches(&header) {
return Ok(ImageType::Psd);
}
if ico::matches(&header) {
return Ok(ImageType::Ico);
}
if aesprite::matches(&header) {
return Ok(ImageType::Aseprite);
}
if exr::matches(&header) {
return Ok(ImageType::Exr);
}
if hdr::matches(&header) {
return Ok(ImageType::Hdr);
}
if dds::matches(&header) {
return Ok(ImageType::Dds);
}
if ktx2::matches(&header) {
return Ok(ImageType::Ktx2);
}
if qoi::matches(&header) {
return Ok(ImageType::Qoi);
}
if farbfeld::matches(&header) {
return Ok(ImageType::Farbfeld);
}
if pnm::matches(&header) {
return Ok(ImageType::Pnm);
}
if vtf::matches(&header) {
return Ok(ImageType::Vtf);
}
if tga::matches(&header, reader) {
return Ok(ImageType::Tga);
}
Err(ImageError::NotSupported)
}