1#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8pub enum ErrorKind {
9 Bus,
12 InvalidDateTime,
14
15 InvalidAlarmConfig,
18 UnsupportedSqwFrequency,
20 InvalidAddress,
22 NvramOutOfBounds,
24 NvramWriteProtected,
26
27 Other,
29}
30
31pub trait RtcError {
33 fn kind(&self) -> ErrorKind;
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
43 enum MockRtcError {
44 I2cError,
45 InvalidDateTime,
46 InvalidAlarmTime,
47 UnsupportedSqwFrequency,
48 InvalidRegisterAddress,
49 NvramAddressOutOfBounds,
50 NvramWriteProtected,
51 UnknownError,
52 }
53
54 impl RtcError for MockRtcError {
55 fn kind(&self) -> ErrorKind {
56 match self {
57 MockRtcError::I2cError => ErrorKind::Bus,
58 MockRtcError::InvalidDateTime => ErrorKind::InvalidDateTime,
59 MockRtcError::InvalidAlarmTime => ErrorKind::InvalidAlarmConfig,
60 MockRtcError::UnsupportedSqwFrequency => ErrorKind::UnsupportedSqwFrequency,
61 MockRtcError::InvalidRegisterAddress => ErrorKind::InvalidAddress,
62 MockRtcError::NvramAddressOutOfBounds => ErrorKind::NvramOutOfBounds,
63 MockRtcError::NvramWriteProtected => ErrorKind::NvramWriteProtected,
64 MockRtcError::UnknownError => ErrorKind::Other,
65 }
66 }
67 }
68
69 #[test]
70 fn test_error_kind_mapping() {
71 assert_eq!(MockRtcError::I2cError.kind(), ErrorKind::Bus);
72 assert_eq!(
73 MockRtcError::InvalidDateTime.kind(),
74 ErrorKind::InvalidDateTime
75 );
76 assert_eq!(
77 MockRtcError::InvalidAlarmTime.kind(),
78 ErrorKind::InvalidAlarmConfig
79 );
80 assert_eq!(
81 MockRtcError::UnsupportedSqwFrequency.kind(),
82 ErrorKind::UnsupportedSqwFrequency
83 );
84 assert_eq!(
85 MockRtcError::InvalidRegisterAddress.kind(),
86 ErrorKind::InvalidAddress
87 );
88 assert_eq!(
89 MockRtcError::NvramAddressOutOfBounds.kind(),
90 ErrorKind::NvramOutOfBounds
91 );
92 assert_eq!(
93 MockRtcError::NvramWriteProtected.kind(),
94 ErrorKind::NvramWriteProtected
95 );
96 assert_eq!(MockRtcError::UnknownError.kind(), ErrorKind::Other);
97 }
98
99 #[test]
100 fn test_error_kind_equality() {
101 assert_eq!(ErrorKind::Bus, ErrorKind::Bus);
102 assert_ne!(ErrorKind::Bus, ErrorKind::InvalidDateTime);
103 assert_ne!(
104 ErrorKind::InvalidAlarmConfig,
105 ErrorKind::UnsupportedSqwFrequency
106 );
107 assert_ne!(ErrorKind::NvramOutOfBounds, ErrorKind::NvramWriteProtected);
108 }
109}