From e67675553f314847aa51c8df3b678e1b09610c6b Mon Sep 17 00:00:00 2001 From: itsscb Date: Mon, 28 Oct 2024 22:32:20 +0100 Subject: [PATCH] feat: add errors --- src/error.rs | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 src/error.rs diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..0a78f79 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,98 @@ +use std::{fmt, sync::Arc}; + +pub enum Error { + Io(std::io::Error), + Wifi(wifi_rs::prelude::WifiHotspotError), + Decoder(rodio::decoder::DecoderError), + Play(rodio::PlayError), + Stream(rodio::StreamError), + Recv(crossbeam_channel::RecvError), + File(std::io::Error), + Rusb(rusb::Error), + Send(crossbeam_channel::SendError>), + MutexPoison, +} + +impl fmt::Debug for Error { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Io(err) => write!(f, "IO error: {err}"), + Self::Wifi(err) => write!(f, "WiFi error: {err:?}"), + Self::Decoder(err) => write!(f, "Decoder error: {err:?}"), + Self::Play(err) => write!(f, "Play error: {err:?}"), + Self::Stream(err) => write!(f, "Stream error: {err:?}"), + Self::Recv(_) => write!(f, "Receiver channel error"), + Self::File(err) => write!(f, "File error: {err}"), + Self::Rusb(err) => write!(f, "Rusb error: {err}"), + Self::Send(err) => write!(f, "Send error: {err}"), + Self::MutexPoison => write!(f, "Mutex poison error"), + } + } +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Io(err) => write!(f, "IO error: {err}"), + Self::Wifi(err) => write!(f, "WiFi error: {err:?}"), + Self::Decoder(err) => write!(f, "Decoder error: {err:?}"), + Self::Play(err) => write!(f, "Play error: {err:?}"), + Self::Stream(err) => write!(f, "Stream error: {err:?}"), + Self::Recv(_) => write!(f, "Receiver channel error"), + Self::File(err) => write!(f, "File error: {err}"), + Self::Rusb(err) => write!(f, "Rusb error: {err}"), + Self::Send(err) => write!(f, "Send error: {err}"), + Self::MutexPoison => write!(f, "Mutex poison error"), + } + } +} + +impl From for Error { + fn from(err: rusb::Error) -> Self { + Self::Rusb(err) + } +} + +impl From for Error { + fn from(err: rodio::StreamError) -> Self { + Self::Stream(err) + } +} + +impl From for Error { + fn from(err: rodio::decoder::DecoderError) -> Self { + Self::Decoder(err) + } +} + +impl From for Error { + fn from(err: rodio::PlayError) -> Self { + Self::Play(err) + } +} + +impl From for Error { + fn from(_: crossbeam_channel::RecvError) -> Self { + Self::Recv(crossbeam_channel::RecvError) + } +} + +impl From for Error { + fn from(err: wifi_rs::prelude::WifiHotspotError) -> Self { + Self::Wifi(err) + } +} + +impl From for Error { + fn from(err: std::io::Error) -> Self { + Self::Io(err) + } +} + +impl From>> for Error { + fn from(_: std::sync::PoisonError>) -> Self { + Self::MutexPoison + } +} + +impl std::error::Error for Error {}