Skip to content

Commit fd46091

Browse files
authored
Merge pull request #45 from lublak/more_type_functions
More type functions
2 parents c2933f5 + 593376f commit fd46091

File tree

1 file changed

+62
-49
lines changed

1 file changed

+62
-49
lines changed

src/lib.rs

Lines changed: 62 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,60 @@ pub enum ImageType {
120120
Webp,
121121
}
122122

123+
impl ImageType {
124+
/// Calls the correct image size method based on the image type
125+
///
126+
/// # Arguments
127+
/// * `reader` - A reader for the data
128+
pub fn reader_size<R: BufRead + Seek>(&self, reader: &mut R) -> ImageResult<ImageSize> {
129+
match self {
130+
#[cfg(feature = "aesprite")]
131+
ImageType::Aseprite => aesprite::size(reader),
132+
#[cfg(feature = "bmp")]
133+
ImageType::Bmp => bmp::size(reader),
134+
#[cfg(feature = "dds")]
135+
ImageType::Dds => dds::size(reader),
136+
#[cfg(feature = "exr")]
137+
ImageType::Exr => exr::size(reader),
138+
#[cfg(feature = "farbfeld")]
139+
ImageType::Farbfeld => farbfeld::size(reader),
140+
#[cfg(feature = "gif")]
141+
ImageType::Gif => gif::size(reader),
142+
#[cfg(feature = "hdr")]
143+
ImageType::Hdr => hdr::size(reader),
144+
#[cfg(feature = "ico")]
145+
ImageType::Ico => ico::size(reader),
146+
#[cfg(feature = "ilbm")]
147+
ImageType::Ilbm => ilbm::size(reader),
148+
#[cfg(feature = "jpeg")]
149+
ImageType::Jpeg => jpeg::size(reader),
150+
#[cfg(feature = "jxl")]
151+
ImageType::Jxl => jxl::size(reader),
152+
#[cfg(feature = "ktx2")]
153+
ImageType::Ktx2 => ktx2::size(reader),
154+
#[cfg(feature = "png")]
155+
ImageType::Png => png::size(reader),
156+
#[cfg(feature = "pnm")]
157+
ImageType::Pnm => pnm::size(reader),
158+
#[cfg(feature = "psd")]
159+
ImageType::Psd => psd::size(reader),
160+
#[cfg(feature = "qoi")]
161+
ImageType::Qoi => qoi::size(reader),
162+
#[cfg(feature = "tga")]
163+
ImageType::Tga => tga::size(reader),
164+
#[cfg(feature = "tiff")]
165+
ImageType::Tiff => tiff::size(reader),
166+
#[cfg(feature = "vtf")]
167+
ImageType::Vtf => vtf::size(reader),
168+
#[cfg(feature = "webp")]
169+
ImageType::Webp => webp::size(reader),
170+
171+
#[cfg(feature = "heif")]
172+
ImageType::Heif(..) => heif::size(reader),
173+
}
174+
}
175+
}
176+
123177
/// Holds the size information of an image.
124178
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
125179
pub struct ImageSize {
@@ -266,58 +320,17 @@ pub fn blob_size(data: &[u8]) -> ImageResult<ImageSize> {
266320
///
267321
/// [`ImageError`]: enum.ImageError.html
268322
pub fn reader_size<R: BufRead + Seek>(mut reader: R) -> ImageResult<ImageSize> {
269-
dispatch_header(&mut reader)
323+
reader_type(&mut reader)?.reader_size(&mut reader)
270324
}
271325

272-
/// Calls the correct image size method based on the image type
326+
/// Get the image type from a reader
273327
///
274328
/// # Arguments
275329
/// * `reader` - A reader for the data
276-
/// * `header` - The header of the file
277-
fn dispatch_header<R: BufRead + Seek>(reader: &mut R) -> ImageResult<ImageSize> {
278-
match formats::image_type(reader)? {
279-
#[cfg(feature = "aesprite")]
280-
ImageType::Aseprite => aesprite::size(reader),
281-
#[cfg(feature = "bmp")]
282-
ImageType::Bmp => bmp::size(reader),
283-
#[cfg(feature = "dds")]
284-
ImageType::Dds => dds::size(reader),
285-
#[cfg(feature = "exr")]
286-
ImageType::Exr => exr::size(reader),
287-
#[cfg(feature = "farbfeld")]
288-
ImageType::Farbfeld => farbfeld::size(reader),
289-
#[cfg(feature = "gif")]
290-
ImageType::Gif => gif::size(reader),
291-
#[cfg(feature = "hdr")]
292-
ImageType::Hdr => hdr::size(reader),
293-
#[cfg(feature = "ico")]
294-
ImageType::Ico => ico::size(reader),
295-
#[cfg(feature = "ilbm")]
296-
ImageType::Ilbm => ilbm::size(reader),
297-
#[cfg(feature = "jpeg")]
298-
ImageType::Jpeg => jpeg::size(reader),
299-
#[cfg(feature = "jxl")]
300-
ImageType::Jxl => jxl::size(reader),
301-
#[cfg(feature = "ktx2")]
302-
ImageType::Ktx2 => ktx2::size(reader),
303-
#[cfg(feature = "png")]
304-
ImageType::Png => png::size(reader),
305-
#[cfg(feature = "pnm")]
306-
ImageType::Pnm => pnm::size(reader),
307-
#[cfg(feature = "psd")]
308-
ImageType::Psd => psd::size(reader),
309-
#[cfg(feature = "qoi")]
310-
ImageType::Qoi => qoi::size(reader),
311-
#[cfg(feature = "tga")]
312-
ImageType::Tga => tga::size(reader),
313-
#[cfg(feature = "tiff")]
314-
ImageType::Tiff => tiff::size(reader),
315-
#[cfg(feature = "vtf")]
316-
ImageType::Vtf => vtf::size(reader),
317-
#[cfg(feature = "webp")]
318-
ImageType::Webp => webp::size(reader),
319-
320-
#[cfg(feature = "heif")]
321-
ImageType::Heif(..) => heif::size(reader),
322-
}
330+
///
331+
/// # Remarks
332+
///
333+
/// This will check the header to determine what image type the data is.
334+
pub fn reader_type<R: BufRead + Seek>(mut reader: R) -> ImageResult<ImageType> {
335+
formats::image_type(&mut reader)
323336
}

0 commit comments

Comments
 (0)