Input: Implement StdError for DcaError, input::Error (#73)
This commit is contained in:
committed by
Kyle Simpson
parent
6a441ba2f9
commit
7045e2ec5a
@@ -1,8 +1,9 @@
|
|||||||
//! Errors caused by input creation.
|
//! Errors caused by input creation.
|
||||||
|
|
||||||
use audiopus::Error as OpusError;
|
use audiopus::Error as OpusError;
|
||||||
|
use core::fmt;
|
||||||
use serde_json::{Error as JsonError, Value};
|
use serde_json::{Error as JsonError, Value};
|
||||||
use std::{io::Error as IoError, process::Output};
|
use std::{error::Error as StdError, io::Error as IoError, process::Output};
|
||||||
use streamcatcher::CatcherError;
|
use streamcatcher::CatcherError;
|
||||||
|
|
||||||
/// An error returned when creating a new [`Input`].
|
/// An error returned when creating a new [`Input`].
|
||||||
@@ -68,6 +69,48 @@ impl From<OpusError> for Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for Error {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
match self {
|
||||||
|
Error::Dca(e) => write!(f, "{}", e),
|
||||||
|
Error::Io(e) => write!(f, "{}", e),
|
||||||
|
Error::Json {
|
||||||
|
error,
|
||||||
|
parsed_text: _,
|
||||||
|
} => write!(f, "{}", error),
|
||||||
|
Error::Opus(e) => write!(f, "{}", e),
|
||||||
|
Error::Metadata => write!(f, "Failed to extract metadata"),
|
||||||
|
Error::Stdout => write!(f, "Failed to create stdout"),
|
||||||
|
Error::Streams => write!(f, "Error while checking if path is stereo"),
|
||||||
|
Error::Streamcatcher(e) => write!(f, "{}", e),
|
||||||
|
Error::YouTubeDlProcessing(_) => write!(f, "Processing JSON from youtube-dl failed"),
|
||||||
|
Error::YouTubeDlRun(_) => write!(f, "youtube-dl encountered an error"),
|
||||||
|
Error::YouTubeDlUrl(_) => write!(f, "Missing url field in JSON"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StdError for Error {
|
||||||
|
fn source(&self) -> Option<&(dyn StdError + 'static)> {
|
||||||
|
match self {
|
||||||
|
Error::Dca(e) => Some(e),
|
||||||
|
Error::Io(e) => Some(e),
|
||||||
|
Error::Json {
|
||||||
|
error,
|
||||||
|
parsed_text: _,
|
||||||
|
} => Some(error),
|
||||||
|
Error::Opus(e) => Some(e),
|
||||||
|
Error::Metadata => None,
|
||||||
|
Error::Stdout => None,
|
||||||
|
Error::Streams => None,
|
||||||
|
Error::Streamcatcher(e) => Some(e),
|
||||||
|
Error::YouTubeDlProcessing(_) => None,
|
||||||
|
Error::YouTubeDlRun(_) => None,
|
||||||
|
Error::YouTubeDlUrl(_) => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// An error returned from the [`dca`] method.
|
/// An error returned from the [`dca`] method.
|
||||||
///
|
///
|
||||||
/// [`dca`]: crate::input::dca
|
/// [`dca`]: crate::input::dca
|
||||||
@@ -86,6 +129,30 @@ pub enum DcaError {
|
|||||||
Opus(OpusError),
|
Opus(OpusError),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for DcaError {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
match self {
|
||||||
|
DcaError::IoError(e) => write!(f, "{}", e),
|
||||||
|
DcaError::InvalidHeader => write!(f, "Invalid DCA JSON header"),
|
||||||
|
DcaError::InvalidMetadata(e) => write!(f, "{}", e),
|
||||||
|
DcaError::InvalidSize(e) => write!(f, "Invalid metadata block size: {}", e),
|
||||||
|
DcaError::Opus(e) => write!(f, "{}", e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl StdError for DcaError {
|
||||||
|
fn source(&self) -> Option<&(dyn StdError + 'static)> {
|
||||||
|
match self {
|
||||||
|
DcaError::IoError(e) => Some(e),
|
||||||
|
DcaError::InvalidHeader => None,
|
||||||
|
DcaError::InvalidMetadata(e) => Some(e),
|
||||||
|
DcaError::InvalidSize(_) => None,
|
||||||
|
DcaError::Opus(e) => Some(e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Convenience type for fallible return of [`Input`]s.
|
/// Convenience type for fallible return of [`Input`]s.
|
||||||
///
|
///
|
||||||
/// [`Input`]: crate::input::Input
|
/// [`Input`]: crate::input::Input
|
||||||
|
|||||||
Reference in New Issue
Block a user