stega/image/
save.rs

1use std::{ffi::OsStr, path::Path};
2
3use image::{self, ImageFormat, RgbImage};
4
5use super::ImageError;
6
7/// Saves an RGB image in the provided path
8pub fn save_image(rgb_image: &RgbImage, path: &Path) -> Result<(), ImageError> {
9    if matches!(path.extension().and_then(OsStr::to_str), Some("png")) {
10        rgb_image.save_with_format(path, ImageFormat::Png)?;
11        Ok(())
12    } else {
13        Err(ImageError::InvalidExtension)
14    }
15}
16
17#[cfg(test)]
18mod tests {
19    use image::{self, RgbImage};
20    use tempfile::Builder;
21
22    use super::*;
23
24    #[test]
25    fn verify_save_image() {
26        let tmpfile = Builder::new().suffix(".png").tempfile().unwrap();
27        let rgb_image = RgbImage::new(5, 5);
28
29        let result = save_image(&rgb_image, tmpfile.path());
30        assert!(result.is_ok());
31    }
32}