Skip to main content

Move the create_thumbnail function into create_thumbnail.rs

ID
12860f5
date
2024-08-20 11:16:02+00:00
author
Alex Chan <alex@alexwlchan.net>
parent
aac0292
message
Move the `create_thumbnail` function into `create_thumbnail.rs`
changed files
2 files, 115 additions, 113 deletions

Changed files

src/create_thumbnail.rs (2224) → src/create_thumbnail.rs (6148)

diff --git a/src/create_thumbnail.rs b/src/create_thumbnail.rs
index 4eb9e3c..06d3c4c 100644
--- a/src/create_thumbnail.rs
+++ b/src/create_thumbnail.rs
@@ -5,6 +5,119 @@ use std::str;
 
 use image::imageops::FilterType;
 
+use crate::create_parent_directory::create_parent_directory;
+use crate::get_thumbnail_dimensions::{get_thumbnail_dimensions, TargetDimension};
+use crate::is_animated_gif::is_animated_gif;
+
+/// Create a thumbnail for the image, and return the relative path of
+/// the thumbnail within the collection folder.
+pub fn create_thumbnail(
+    path: &PathBuf,
+    out_dir: &PathBuf,
+    target: TargetDimension,
+) -> io::Result<PathBuf> {
+    let thumbnail_path = out_dir.join(path.file_name().unwrap());
+    create_parent_directory(&thumbnail_path)?;
+
+    // TODO: Does this check do what I think?
+    assert!(*path != thumbnail_path);
+
+    let (new_width, new_height) = get_thumbnail_dimensions(&path, target)
+        .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e.to_string()))?;
+
+    if is_animated_gif(path)? {
+        create_animated_gif_thumbnail(path, out_dir, new_width, new_height)
+    } else {
+        create_static_thumbnail(path, out_dir, new_width, new_height)
+    }
+}
+
+#[cfg(test)]
+mod test_create_thumbnail {
+    use std::path::PathBuf;
+
+    use super::create_thumbnail;
+    use crate::get_thumbnail_dimensions::TargetDimension;
+    use crate::test_utils::{get_dimensions, test_dir};
+
+    #[test]
+    fn creates_an_animated_gif_thumbnail() {
+        let gif_path = PathBuf::from("src/tests/animated_squares.gif");
+        let out_dir = test_dir();
+        let target = TargetDimension::MaxWidth(16);
+
+        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
+
+        assert_eq!(thumbnail_path, out_dir.join("animated_squares.mp4"));
+        assert!(thumbnail_path.exists());
+    }
+
+    #[test]
+    fn creates_a_static_gif_thumbnail() {
+        let gif_path = PathBuf::from("src/tests/yellow.gif");
+        let out_dir = test_dir();
+        let target = TargetDimension::MaxWidth(16);
+
+        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
+
+        assert_eq!(thumbnail_path, out_dir.join("yellow.gif"));
+        assert!(thumbnail_path.exists());
+        assert_eq!(get_dimensions(&thumbnail_path), (16, 8));
+    }
+
+    #[test]
+    fn creates_a_png_thumbnail() {
+        let gif_path = PathBuf::from("src/tests/red.png");
+        let out_dir = test_dir();
+        let target = TargetDimension::MaxWidth(16);
+
+        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
+
+        assert_eq!(thumbnail_path, out_dir.join("red.png"));
+        assert!(thumbnail_path.exists());
+        assert_eq!(get_dimensions(&thumbnail_path), (16, 32));
+    }
+
+    #[test]
+    fn creates_a_jpeg_thumbnail() {
+        let gif_path = PathBuf::from("src/tests/noise.jpg");
+        let out_dir = test_dir();
+        let target = TargetDimension::MaxWidth(16);
+
+        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
+
+        assert_eq!(thumbnail_path, out_dir.join("noise.jpg"));
+        assert!(thumbnail_path.exists());
+        assert_eq!(get_dimensions(&thumbnail_path), (16, 32));
+    }
+
+    #[test]
+    fn creates_a_tif_thumbnail() {
+        let gif_path = PathBuf::from("src/tests/green.tiff");
+        let out_dir = test_dir();
+        let target = TargetDimension::MaxHeight(16);
+
+        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
+
+        assert_eq!(thumbnail_path, out_dir.join("green.tiff"));
+        assert!(thumbnail_path.exists());
+        assert_eq!(get_dimensions(&thumbnail_path), (16, 16));
+    }
+
+    #[test]
+    fn creates_a_webp_thumbnail() {
+        let gif_path = PathBuf::from("src/tests/purple.webp");
+        let out_dir = test_dir();
+        let target = TargetDimension::MaxWidth(16);
+
+        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
+
+        assert_eq!(thumbnail_path, out_dir.join("purple.webp"));
+        assert!(thumbnail_path.exists());
+        assert_eq!(get_dimensions(&thumbnail_path), (16, 16));
+    }
+}
+
 /// Create a thumbnail for an animated GIF.
 ///
 /// This will use `ffmpeg` to create an MP4 file of the desired dimensions

src/main.rs (8332) → src/main.rs (4461)

diff --git a/src/main.rs b/src/main.rs
index 9d5a40b..120f6a3 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,6 +1,5 @@
 #![deny(warnings)]
 
-use std::io;
 use std::path::PathBuf;
 
 use clap::{ArgGroup, Parser};
@@ -10,118 +9,8 @@ mod create_thumbnail;
 mod get_thumbnail_dimensions;
 mod is_animated_gif;
 
-use crate::create_parent_directory::create_parent_directory;
-use crate::get_thumbnail_dimensions::{get_thumbnail_dimensions, TargetDimension};
-use crate::is_animated_gif::is_animated_gif;
-
-/// Create a thumbnail for the image, and return the relative path of
-/// the thumbnail within the collection folder.
-pub fn create_thumbnail(
-    path: &PathBuf,
-    out_dir: &PathBuf,
-    target: TargetDimension,
-) -> io::Result<PathBuf> {
-    let thumbnail_path = out_dir.join(path.file_name().unwrap());
-    create_parent_directory(&thumbnail_path)?;
-
-    // TODO: Does this check do what I think?
-    assert!(*path != thumbnail_path);
-
-    let (new_width, new_height) = get_thumbnail_dimensions(&path, target)
-        .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e.to_string()))?;
-
-    if is_animated_gif(path)? {
-        create_thumbnail::create_animated_gif_thumbnail(path, out_dir, new_width, new_height)
-    } else {
-        create_thumbnail::create_static_thumbnail(path, out_dir, new_width, new_height)
-    }
-}
-
-#[cfg(test)]
-mod test_create_thumbnail {
-    use std::path::PathBuf;
-
-    use super::create_thumbnail;
-    use crate::get_thumbnail_dimensions::TargetDimension;
-    use crate::test_utils::{get_dimensions, test_dir};
-
-    #[test]
-    fn creates_an_animated_gif_thumbnail() {
-        let gif_path = PathBuf::from("src/tests/animated_squares.gif");
-        let out_dir = test_dir();
-        let target = TargetDimension::MaxWidth(16);
-
-        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
-
-        assert_eq!(thumbnail_path, out_dir.join("animated_squares.mp4"));
-        assert!(thumbnail_path.exists());
-    }
-
-    #[test]
-    fn creates_a_static_gif_thumbnail() {
-        let gif_path = PathBuf::from("src/tests/yellow.gif");
-        let out_dir = test_dir();
-        let target = TargetDimension::MaxWidth(16);
-
-        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
-
-        assert_eq!(thumbnail_path, out_dir.join("yellow.gif"));
-        assert!(thumbnail_path.exists());
-        assert_eq!(get_dimensions(&thumbnail_path), (16, 8));
-    }
-
-    #[test]
-    fn creates_a_png_thumbnail() {
-        let gif_path = PathBuf::from("src/tests/red.png");
-        let out_dir = test_dir();
-        let target = TargetDimension::MaxWidth(16);
-
-        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
-
-        assert_eq!(thumbnail_path, out_dir.join("red.png"));
-        assert!(thumbnail_path.exists());
-        assert_eq!(get_dimensions(&thumbnail_path), (16, 32));
-    }
-
-    #[test]
-    fn creates_a_jpeg_thumbnail() {
-        let gif_path = PathBuf::from("src/tests/noise.jpg");
-        let out_dir = test_dir();
-        let target = TargetDimension::MaxWidth(16);
-
-        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
-
-        assert_eq!(thumbnail_path, out_dir.join("noise.jpg"));
-        assert!(thumbnail_path.exists());
-        assert_eq!(get_dimensions(&thumbnail_path), (16, 32));
-    }
-
-    #[test]
-    fn creates_a_tif_thumbnail() {
-        let gif_path = PathBuf::from("src/tests/green.tiff");
-        let out_dir = test_dir();
-        let target = TargetDimension::MaxHeight(16);
-
-        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
-
-        assert_eq!(thumbnail_path, out_dir.join("green.tiff"));
-        assert!(thumbnail_path.exists());
-        assert_eq!(get_dimensions(&thumbnail_path), (16, 16));
-    }
-
-    #[test]
-    fn creates_a_webp_thumbnail() {
-        let gif_path = PathBuf::from("src/tests/purple.webp");
-        let out_dir = test_dir();
-        let target = TargetDimension::MaxWidth(16);
-
-        let thumbnail_path = create_thumbnail(&gif_path, &out_dir, target).unwrap();
-
-        assert_eq!(thumbnail_path, out_dir.join("purple.webp"));
-        assert!(thumbnail_path.exists());
-        assert_eq!(get_dimensions(&thumbnail_path), (16, 16));
-    }
-}
+use crate::create_thumbnail::create_thumbnail;
+use crate::get_thumbnail_dimensions::TargetDimension;
 
 #[derive(Debug, Parser)]
 #[clap(version, about)]