diff --git a/src/utils.rs b/src/utils.rs index 12512cf..dafd1f2 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,48 +1,20 @@ use std::path::{Path, PathBuf}; use iced::widget; -use image::{DynamicImage, ImageDecoder, ImageReader, RgbaImage}; +use image::{DynamicImage, ImageDecoder, ImageReader, ImageResult, RgbaImage}; use rfd::FileDialog; pub fn load_image(path: impl AsRef) -> Result { - let path = path.as_ref(); + _load_image(path).map_err(|e| e.to_string()) +} +fn _load_image(path: impl AsRef) -> ImageResult { + let mut decoder = ImageReader::open(path)? + .with_guessed_format()? + .into_decoder()?; - let image_reader = match ImageReader::open(path).and_then(|r| r.with_guessed_format()) { - Ok(r) => r, - Err(e) => { - return Err(format!( - "failed to create image reader for '{}': {e}", - path.display() - )); - } - }; + let oreintation = decoder.orientation()?; - let mut decoder = match image_reader.into_decoder() { - Ok(d) => d, - Err(e) => { - return Err(format!( - "failed to create decoder for '{}': {e}", - path.display() - )); - } - }; - - let oreintation = match decoder.orientation() { - Ok(o) => o, - Err(e) => { - return Err(format!( - "failed to get oreintation of '{}': {e}", - path.display() - )); - } - }; - - let mut decoded_image = match DynamicImage::from_decoder(decoder) { - Ok(i) => i, - Err(e) => { - return Err(format!("failed to decode image '{}': {e}", path.display())); - } - }; + let mut decoded_image = DynamicImage::from_decoder(decoder)?; decoded_image.apply_orientation(oreintation); @@ -75,7 +47,7 @@ pub fn save_image(image: Option<&RgbaImage>) -> Result<(), String> { }; if let Err(e) = image.save(&path) { - return Err(format!("failed to save '{}': {e}", path.display())); + return Err(e.to_string()); }; Ok(())