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}