Skip to main content

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)]
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}