1use flume::RecvTimeoutError;
2use std::num::ParseIntError;
3
4pub type Result<T> = std::result::Result<T, Error>;
5
6#[derive(thiserror::Error, Debug)]
7#[non_exhaustive]
8pub enum Error {
9 #[error("Invalid URI scheme")]
10 InvalidUriScheme,
11 #[error("Invalid URI")]
12 InvalidUri,
13 #[error("Operation not supported for this URI scheme")]
14 NotSupported,
15 #[error("Invalid packet data")]
16 InvalidData,
17 #[error("Timeout")]
18 Timeout,
19 #[error("Crazyradio error: {0:?}")]
20 CrazyradioError(crate::crazyradio::Error),
21 #[error("Threading error: {0:?}")]
22 ChannelRecvError(flume::RecvError),
23 #[error("Threading error: {0:?}")]
24 ChannelSendError(flume::SendError<Vec<u8>>),
25 #[error("USB error: {0:?}")]
26 USBSubsystemError(rusb::Error),
27}
28
29impl From<crate::crazyradio::Error> for Error {
30 fn from(error: crate::crazyradio::Error) -> Self {
31 Error::CrazyradioError(error)
32 }
33}
34
35impl From<flume::RecvError> for Error {
36 fn from(error: flume::RecvError) -> Self {
37 Error::ChannelRecvError(error)
38 }
39}
40
41impl From<flume::SendError<Vec<u8>>> for Error {
42 fn from(error: flume::SendError<Vec<u8>>) -> Self {
43 Error::ChannelSendError(error)
44 }
45}
46
47impl From<url::ParseError> for Error {
48 fn from(_error: url::ParseError) -> Self {
49 Error::InvalidUri
50 }
51}
52
53impl From<ParseIntError> for Error {
54 fn from(_error: ParseIntError) -> Self {
55 Error::InvalidUri
56 }
57}
58
59impl From<RecvTimeoutError> for Error {
60 fn from(_error: RecvTimeoutError) -> Self {
61 Error::Timeout
62 }
63}
64
65impl From<rusb::Error> for Error {
66 fn from(error: rusb::Error) -> Self {
67 Error::USBSubsystemError(error)
68 }
69}