lilliput_core/header/
null.rs

1#[cfg(any(test, feature = "testing"))]
2use proptest::prelude::*;
3#[cfg(any(test, feature = "testing"))]
4use proptest_derive::Arbitrary;
5
6/// Header representing a null value.
7#[cfg_attr(any(test, feature = "testing"), derive(Arbitrary))]
8#[derive(Default, Copy, Clone, Eq, PartialEq, Debug)]
9pub struct NullHeader;
10
11impl NullHeader {
12    /// Creates a new header for a null value.
13    #[inline]
14    pub fn new() -> Self {
15        Self
16    }
17}
18
19impl NullHeader {
20    pub(crate) const MASK: u8 = 0b00000000;
21    pub(crate) const TYPE_BITS: u8 = 0b00000000;
22}
23
24#[cfg(test)]
25mod tests {
26    use proptest::prelude::*;
27    use test_log::test;
28
29    use crate::{
30        config::EncoderConfig,
31        decoder::Decoder,
32        encoder::Encoder,
33        io::{SliceReader, VecWriter},
34    };
35
36    use super::*;
37
38    proptest! {
39        #[test]
40        fn encode_decode_roundtrip(header in NullHeader::arbitrary(), config in EncoderConfig::arbitrary()) {
41            let mut encoded: Vec<u8> = Vec::new();
42            let writer = VecWriter::new(&mut encoded);
43            let mut encoder = Encoder::new(writer, config);
44            encoder.encode_null_header(&header).unwrap();
45
46            prop_assert!(encoded.len() == 1);
47
48            let reader = SliceReader::new(&encoded);
49            let mut decoder = Decoder::from_reader(reader);
50            let decoded = decoder.decode_null_header().unwrap();
51            prop_assert_eq!(&decoded, &header);
52        }
53    }
54}