1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
use core::fmt::Debug;
use snafu::{AsErrorSource, Snafu};
#[derive(Snafu, Debug)]
pub enum Error<#[cfg(feature = "std")] E: AsErrorSource, #[cfg(not(feature = "std"))] E> {
#[snafu(display("communicating with the device failed"))]
#[cfg_attr(feature = "std", snafu(context(false)))]
DeviceIOError {
#[cfg_attr(not(feature = "std"), snafu(source(false)))]
source: E,
},
#[snafu(display("device reported '0' bytes written"))]
DeviceWriteZero,
#[snafu(display(
"tried to write '{requested}' bytes, but device reported '{reported}' bytes written"
))]
DeviceWriteTooMuch {
requested: usize,
reported: usize,
},
#[snafu(display("device reported '0' bytes read"))]
DeviceReadZero,
#[snafu(display(
"tried to read '{requested}' bytes, but device reported '{reported}' bytes read"
))]
DeviceReadTooMuch {
requested: usize,
reported: usize,
},
#[snafu(display(
"synchronization bit of byte '{:02X?}' at index '{}' must be set. Raw package: '{:02X?}' {:02X?}",
bytes[*invalid_index],
invalid_index,
code,
&bytes[..*length]
))]
InvalidPackageData {
code: u8,
bytes: [u8; 8],
length: usize,
invalid_index: usize,
},
#[snafu(display("got unknown package type code {code:#04X}"))]
UnknownTypeCode {
code: u8,
},
}
#[cfg(not(feature = "std"))]
impl<E> From<E> for Error<E> {
fn from(source: E) -> Self {
Error::DeviceIOError { source }
}
}