etherparse/err/ip/
ip_dscp_unknown_value_error.rs

1use core::{cmp::Eq, cmp::PartialEq, fmt::Debug, hash::Hash};
2
3/// Error if an unknown value is passed to [`crate::IpDscpKnown::try_from_ip_dscp`].
4#[derive(Clone, Debug, Eq, PartialEq, Hash)]
5pub struct IpDscpUnknownValueError {
6    /// Unknown DSCP value that caused the error.
7    pub value: u8,
8}
9
10impl core::fmt::Display for IpDscpUnknownValueError {
11    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
12        write!(f, "Error DSCP value '{}' is not known.", self.value)
13    }
14}
15
16impl core::error::Error for IpDscpUnknownValueError {
17    fn source(&self) -> Option<&(dyn core::error::Error + 'static)> {
18        None
19    }
20}
21
22#[cfg(test)]
23mod test {
24    use super::*;
25    use std::{collections::hash_map::DefaultHasher, error::Error, format, hash::Hasher};
26
27    #[test]
28    fn fmt() {
29        assert_eq!(
30            format!("{}", IpDscpUnknownValueError { value: 3 }),
31            "Error DSCP value '3' is not known."
32        );
33    }
34
35    #[test]
36    fn dbg() {
37        assert_eq!(
38            format!("{:?}", IpDscpUnknownValueError { value: 3 }),
39            format!("IpDscpUnknownValueError {{ value: {} }}", 3)
40        );
41    }
42
43    #[test]
44    fn clone_eq_hash() {
45        let err = IpDscpUnknownValueError { value: 3 };
46        assert_eq!(err, err.clone());
47        let hash_a = {
48            let mut hasher = DefaultHasher::new();
49            err.hash(&mut hasher);
50            hasher.finish()
51        };
52        let hash_b = {
53            let mut hasher = DefaultHasher::new();
54            err.clone().hash(&mut hasher);
55            hasher.finish()
56        };
57        assert_eq!(hash_a, hash_b);
58    }
59
60    #[cfg(feature = "std")]
61    #[test]
62    fn source() {
63        assert!(IpDscpUnknownValueError { value: 3 }.source().is_none());
64    }
65}