automotive_wire_codec/
error.rs1#[derive(Clone, Copy, Debug, Eq, PartialEq)]
6pub struct Incomplete {
7 pub needed: usize,
9 pub available: usize,
11}
12
13#[derive(Clone, Copy, Debug, Eq, PartialEq)]
15pub struct TrailingBytes(pub usize);
16
17impl core::fmt::Display for Incomplete {
18 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
19 write!(
20 f,
21 "incomplete input: needed {} bytes, {} available",
22 self.needed, self.available
23 )
24 }
25}
26impl core::error::Error for Incomplete {}
27
28impl core::fmt::Display for TrailingBytes {
29 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
30 write!(f, "{} trailing bytes after decode", self.0)
31 }
32}
33impl core::error::Error for TrailingBytes {}
34
35#[derive(Clone, Copy, Debug, Eq, PartialEq)]
41pub struct InvalidWidth {
42 pub max: usize,
44 pub got: usize,
46}
47
48#[derive(Clone, Copy, Debug, Eq, PartialEq)]
55pub struct InsufficientBuffer {
56 pub needed: usize,
58 pub available: usize,
60}
61
62impl core::fmt::Display for InvalidWidth {
63 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
64 write!(f, "invalid width: got {}, max {}", self.got, self.max)
65 }
66}
67impl core::error::Error for InvalidWidth {}
68
69impl core::fmt::Display for InsufficientBuffer {
70 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
71 write!(
72 f,
73 "insufficient buffer: needed {} bytes, {} available",
74 self.needed, self.available
75 )
76 }
77}
78impl core::error::Error for InsufficientBuffer {}
79
80#[cfg(test)]
81mod tests {
82 use super::*;
83 use std::string::ToString;
84
85 #[test]
86 fn incomplete_display() {
87 let e = Incomplete {
88 needed: 4,
89 available: 1,
90 };
91 assert_eq!(
92 e.to_string(),
93 "incomplete input: needed 4 bytes, 1 available"
94 );
95 }
96
97 #[test]
98 fn trailing_display() {
99 assert_eq!(
100 TrailingBytes(3).to_string(),
101 "3 trailing bytes after decode"
102 );
103 }
104
105 fn assert_is_error<T: core::error::Error>() {}
106
107 #[test]
108 fn impl_core_error() {
109 assert_is_error::<Incomplete>();
110 assert_is_error::<TrailingBytes>();
111 }
112
113 #[test]
114 fn invalid_width_display() {
115 let e = InvalidWidth { max: 16, got: 255 };
116 assert_eq!(e.to_string(), "invalid width: got 255, max 16");
117 }
118
119 #[test]
120 fn insufficient_buffer_display() {
121 let e = InsufficientBuffer {
122 needed: 8,
123 available: 4,
124 };
125 assert_eq!(
126 e.to_string(),
127 "insufficient buffer: needed 8 bytes, 4 available"
128 );
129 }
130
131 #[test]
132 fn new_fragments_impl_core_error() {
133 assert_is_error::<InvalidWidth>();
134 assert_is_error::<InsufficientBuffer>();
135 }
136}