someip_parse/err/
slice_write_space_error.rs1use super::*;
2
3#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
6pub struct SliceWriteSpaceError {
7 pub required_len: usize,
10
11 pub len: usize,
13
14 pub layer: Layer,
16}
17
18impl core::fmt::Display for SliceWriteSpaceError {
19 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
20 write!(
21 f,
22 "Not enough space to write {} to slice. Needed {} byte(s), but only {} byte(s) were available.",
23 self.layer,
24 self.required_len,
25 self.len,
26 )
27 }
28}
29
30impl std::error::Error for SliceWriteSpaceError {
31 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
32 None
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 fn debug_write() {
42 let _ = format!(
43 "{:?}",
44 SliceWriteSpaceError {
45 required_len: 1,
46 len: 0,
47 layer: Layer::SomeipTpHeader
48 }
49 );
50 }
51
52 #[test]
53 fn clone_eq_hash_ord() {
54 use core::cmp::Ordering;
55 use std::collections::hash_map::DefaultHasher;
56 use std::hash::{Hash, Hasher};
57
58 let err = SliceWriteSpaceError {
59 required_len: 1,
60 len: 0,
61 layer: Layer::SomeipTpHeader,
62 };
63 assert_eq!(err, err.clone());
64 let hash_a = {
65 let mut hasher = DefaultHasher::new();
66 err.hash(&mut hasher);
67 hasher.finish()
68 };
69 let hash_b = {
70 let mut hasher = DefaultHasher::new();
71 err.clone().hash(&mut hasher);
72 hasher.finish()
73 };
74 assert_eq!(hash_a, hash_b);
75 assert_eq!(Ordering::Equal, err.cmp(&err));
76 assert_eq!(Some(Ordering::Equal), err.partial_cmp(&err));
77 }
78
79 #[test]
80 fn fmt() {
81 assert_eq!(
82 format!("{}", SliceWriteSpaceError{ required_len: 4, len: 1, layer: Layer::SomeipTpHeader }),
83 "Not enough space to write SOMEIP TP header to slice. Needed 4 byte(s), but only 1 byte(s) were available."
84 );
85 }
86
87 #[test]
88 fn source() {
89 use std::error::Error;
90 assert!(SliceWriteSpaceError {
91 required_len: 4,
92 len: 1,
93 layer: Layer::SomeipTpHeader
94 }
95 .source()
96 .is_none());
97 }
98}