diff --git a/src/error.rs b/src/error.rs index b36bba1..273aad5 100644 --- a/src/error.rs +++ b/src/error.rs @@ -90,8 +90,8 @@ pub(crate) enum UploadError { #[error("Provided token did not match expected token")] InvalidToken, - #[error("Unsupported image format")] - UnsupportedFormat, + #[error("Process endpoint was called with invalid extension")] + UnsupportedProcessExtension, #[error("Gif uploads are not enabled")] SilentVideoDisabled, @@ -168,11 +168,11 @@ impl ResponseError for Error { | UploadError::Limit(_) | UploadError::NoFiles | UploadError::Upload(_) - | UploadError::UnsupportedFormat | UploadError::Store(crate::store::StoreError::Repo( crate::repo::RepoError::AlreadyClaimed, )) | UploadError::Repo(crate::repo::RepoError::AlreadyClaimed) + | UploadError::UnsupportedProcessExtension | UploadError::SilentVideoDisabled, ) => StatusCode::BAD_REQUEST, Some(UploadError::MissingAlias) => StatusCode::NOT_FOUND, diff --git a/src/ffmpeg.rs b/src/ffmpeg.rs index d10f64b..a878220 100644 --- a/src/ffmpeg.rs +++ b/src/ffmpeg.rs @@ -4,7 +4,7 @@ mod tests; use crate::{ config::{AudioCodec, ImageFormat, MediaConfiguration, VideoCodec}, error::{Error, UploadError}, - magick::{Details, ValidInputType}, + magick::{Details, ParseDetailsError, ValidInputType}, process::Process, store::{Store, StoreError}, }; @@ -498,7 +498,8 @@ fn parse_details(output: DetailsOutput) -> Result, Error> { stream.height, stream.nb_read_frames.as_deref(), *v, - ); + ) + .map_err(Error::from); } } @@ -510,9 +511,13 @@ fn parse_details_inner( height: usize, frames: Option<&str>, format: VideoFormat, -) -> Result, Error> { +) -> Result, ParseDetailsError> { let frames = frames - .map(|frames| frames.parse().map_err(|_| UploadError::UnsupportedFormat)) + .map(|frames| { + frames + .parse() + .map_err(|_| ParseDetailsError::ParseFrames(String::from(frames))) + }) .transpose()? .unwrap_or(1); diff --git a/src/lib.rs b/src/lib.rs index ee031b8..46b567c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -562,7 +562,7 @@ fn prepare_process( let format = ext .parse::() - .map_err(|_| UploadError::UnsupportedFormat)?; + .map_err(|_| UploadError::UnsupportedProcessExtension)?; let ext = format.to_string(); diff --git a/src/magick.rs b/src/magick.rs index b153a9b..8485bff 100644 --- a/src/magick.rs +++ b/src/magick.rs @@ -272,6 +272,9 @@ pub(crate) enum ParseDetailsError { #[error("Format is unsupported: {0}")] Unsupported(String), + + #[error("Could not parse frame count from {0}")] + ParseFrames(String), } fn parse_details(details_output: Vec) -> Result { @@ -297,7 +300,7 @@ fn parse_details(details_output: Vec) -> Result { if !details_output .iter() - .all(|details| &details.image.format == format) + .all(|details| details.image.format == format) { return Err(ParseDetailsError::MixedFormats.into()); }