1 /// Errors when setting the next header IP number. 2 #[derive(Clone, Debug, Eq, PartialEq, Hash)] 3 pub enum NetSetNextHeaderError { 4 /// It is possible to set the ip_number in an ARP header. 5 ArpHeader, 6 } 7 8 impl core::fmt::Display for NetSetNextHeaderError { fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result9 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { 10 use NetSetNextHeaderError::*; 11 match self { 12 ArpHeader => write!( 13 f, 14 "It is not possible to set the payload 'IP number' for an ARP header." 15 ), 16 } 17 } 18 } 19 20 #[cfg(feature = "std")] 21 #[cfg_attr(docsrs, doc(cfg(feature = "std")))] 22 impl std::error::Error for NetSetNextHeaderError { 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::*; 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 "ArpHeader", 42 format!("{:?}", NetSetNextHeaderError::ArpHeader) 43 ); 44 } 45 46 #[test] clone_eq_hash()47 fn clone_eq_hash() { 48 let err = NetSetNextHeaderError::ArpHeader; 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 "It is not possible to set the payload 'IP number' for an ARP header.", 67 format!("{}", NetSetNextHeaderError::ArpHeader) 68 ); 69 } 70 71 #[cfg(feature = "std")] 72 #[test] source()73 fn source() { 74 let values = [NetSetNextHeaderError::ArpHeader]; 75 for v in values { 76 assert!(v.source().is_none()); 77 } 78 } 79 } 80