use clap::ArgEnum; use image::{imageops, GenericImage, Pixel}; use serde::{Deserialize, Serialize}; use crate::TypedOutputFormat; #[derive(Copy, Clone, Serialize, Deserialize, ArgEnum, Debug)] pub enum RotateDegree { #[serde(rename = "90")] One, #[serde(rename = "180")] Two, #[serde(rename = "270")] Three, } pub fn rotate<T: GenericImage>( image: &T, degree: RotateDegree, ) -> anyhow::Result<TypedOutputFormat<T>> where T::Pixel: 'static, <T::Pixel as Pixel>::Subpixel: 'static, { use RotateDegree::*; match degree { One => Ok(imageops::rotate90(image)), Two => Ok(imageops::rotate180(image)), Three => Ok(imageops::rotate270(image)), } }