music_tag/
error.rs

1use std::fmt::Display;
2
3pub type Result<T> = std::result::Result<T, Error>;
4#[derive(Debug)]
5pub enum Error {
6    Id3Error(id3::Error),
7    FlacError(metaflac::Error),
8    M4aError(mp4ameta::Error),
9    IoError(std::io::Error),
10    FmtError(String),
11    DecoderError(base64::DecodeError),
12    OtherError(symphonia::core::errors::Error),
13    ImageError(imagesize::ImageError),
14    NotSupportedError,
15    UnknownError,
16}
17impl Default for Error {
18    fn default() -> Self {
19        Self::UnknownError
20    }
21}
22impl Display for Error {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        match self {
25            Error::FlacError(error) => Display::fmt(error, f),
26            Error::Id3Error(error) => Display::fmt(error, f),
27            Error::M4aError(error) => Display::fmt(error, f),
28            Error::IoError(error) => Display::fmt(error, f),
29            Error::FmtError(error) => Display::fmt(error, f),
30            Error::DecoderError(error) => Display::fmt(error, f),
31            Error::OtherError(err) => Display::fmt(err, f),
32            Error::UnknownError => f.write_str("Unknown Error"),
33            Error::ImageError(error) => Display::fmt(error, f),
34            Error::NotSupportedError => f.write_str("Not Supported"),
35        }
36    }
37}
38impl std::error::Error for Error {}
39impl From<id3::Error> for Error {
40    fn from(value: id3::Error) -> Self {
41        Self::Id3Error(value)
42    }
43}
44impl From<metaflac::Error> for Error {
45    fn from(value: metaflac::Error) -> Self {
46        Self::FlacError(value)
47    }
48}
49
50impl From<mp4ameta::Error> for Error {
51    fn from(value: mp4ameta::Error) -> Self {
52        Self::M4aError(value)
53    }
54}
55impl From<std::io::Error> for Error {
56    fn from(value: std::io::Error) -> Self {
57        Self::IoError(value)
58    }
59}
60impl From<base64::DecodeError> for Error {
61    fn from(value: base64::DecodeError) -> Self {
62        Self::DecoderError(value)
63    }
64}
65
66impl From<symphonia::core::errors::Error> for Error {
67    fn from(value: symphonia::core::errors::Error) -> Self {
68        use symphonia::core::errors::Error as OtherError;
69        match value {
70            OtherError::IoError(err) => Error::IoError(err),
71            _ => Error::OtherError(value),
72        }
73    }
74}
75impl From<imagesize::ImageError> for Error {
76    fn from(value: imagesize::ImageError) -> Self {
77        Self::ImageError(value)
78    }
79}