crazyflie_link/
error.rs

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