• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /// Error when decoding the IPv6 header.
2 #[derive(Clone, Debug, Eq, PartialEq, Hash)]
3 pub enum HeaderError {
4     /// Error when the IPv6 header version field is not equal to 6.
5     UnexpectedVersion {
6         /// The unexpected version number in the IPv6 header.
7         version_number: u8,
8     },
9 }
10 
11 impl core::fmt::Display for HeaderError {
fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result12     fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
13         use HeaderError::*;
14         match self {
15             UnexpectedVersion { version_number } => write!(f, "IPv6 Header Error: Encountered '{}' as IP version number in the IPv6 header (must be '6' in an IPv6 header).", version_number),
16         }
17     }
18 }
19 
20 #[cfg(feature = "std")]
21 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
22 impl std::error::Error for HeaderError {
source(&self) -> Option<&(dyn std::error::Error + 'static)>23     fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
24         None
25     }
26 }
27 
28 #[cfg(test)]
29 mod tests {
30     use super::{HeaderError::*, *};
31     use alloc::format;
32     use std::{
33         collections::hash_map::DefaultHasher,
34         error::Error,
35         hash::{Hash, Hasher},
36     };
37 
38     #[test]
debug()39     fn debug() {
40         assert_eq!(
41             "UnexpectedVersion { version_number: 1 }",
42             format!("{:?}", UnexpectedVersion { version_number: 1 })
43         );
44     }
45 
46     #[test]
clone_eq_hash()47     fn clone_eq_hash() {
48         let err = HeaderError::UnexpectedVersion { version_number: 6 };
49         assert_eq!(err, err.clone());
50         let hash_a = {
51             let mut hasher = DefaultHasher::new();
52             err.hash(&mut hasher);
53             hasher.finish()
54         };
55         let hash_b = {
56             let mut hasher = DefaultHasher::new();
57             err.clone().hash(&mut hasher);
58             hasher.finish()
59         };
60         assert_eq!(hash_a, hash_b);
61     }
62 
63     #[test]
fmt()64     fn fmt() {
65         assert_eq!(
66             "IPv6 Header Error: Encountered '1' as IP version number in the IPv6 header (must be '6' in an IPv6 header).",
67             format!("{}", UnexpectedVersion{ version_number: 1 })
68         );
69     }
70 
71     #[cfg(feature = "std")]
72     #[test]
source()73     fn source() {
74         let values = [UnexpectedVersion { version_number: 0 }];
75         for v in values {
76             assert!(v.source().is_none());
77         }
78     }
79 }
80