• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /// Errors that can occour when setting the options of a tcp header.
2 #[derive(Clone, Debug, Eq, PartialEq)]
3 pub enum TcpOptionWriteError {
4     /// There is not enough memory to store all options in the options section of the header (maximum 40 bytes).
5     ///
6     /// The options size is limited by the 4 bit data_offset field in the header which describes
7     /// the total tcp header size in multiple of 4 bytes. This leads to a maximum size for the options
8     /// part of the header of 4*(15 - 5) (minus 5 for the size of the tcp header itself).
9     NotEnoughSpace(usize),
10 }
11 
12 #[cfg(feature = "std")]
13 #[cfg_attr(docsrs, doc(cfg(feature = "std")))]
14 impl std::error::Error for TcpOptionWriteError {
source(&self) -> Option<&(dyn std::error::Error + 'static)>15     fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
16         None
17     }
18 }
19 
20 impl core::fmt::Display for TcpOptionWriteError {
fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result21     fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
22         use TcpOptionWriteError::*;
23         match self {
24             NotEnoughSpace(size) => {
25                 write!(f, "TcpOptionWriteError: Not enough memory to store all options in the options section of a tcp header (maximum 40 bytes can be stored, the options would have needed {} bytes).", size)
26             }
27         }
28     }
29 }
30 
31 #[cfg(test)]
32 mod test {
33     use crate::*;
34     use alloc::format;
35     use proptest::prelude::*;
36 
37     #[test]
debug()38     fn debug() {
39         use TcpOptionWriteError::*;
40         assert_eq!("NotEnoughSpace(0)", format!("{:?}", NotEnoughSpace(0)));
41     }
42 
43     #[test]
clone_eq()44     fn clone_eq() {
45         use TcpOptionWriteError::*;
46         let value = NotEnoughSpace(123);
47         assert_eq!(value, value.clone());
48     }
49 
50     #[cfg(feature = "std")]
51     proptest! {
52         #[test]
53         fn source(arg_usize in any::<usize>()) {
54             use std::error::Error;
55             use crate::TcpOptionWriteError::*;
56 
57             assert!(NotEnoughSpace(arg_usize).source().is_none());
58         }
59     }
60 
61     proptest! {
62         #[test]
63         fn fmt(arg_usize in any::<usize>()) {
64             use crate::TcpOptionWriteError::*;
65 
66             assert_eq!(
67                 &format!("TcpOptionWriteError: Not enough memory to store all options in the options section of a tcp header (maximum 40 bytes can be stored, the options would have needed {} bytes).", arg_usize),
68                 &format!("{}", NotEnoughSpace(arg_usize))
69             );
70         }
71     }
72 }
73