naia_serde/impls/
phantom.rs

1use std::marker::PhantomData;
2
3use crate::{
4    bit_reader::BitReader,
5    bit_writer::BitWrite,
6    error::SerdeErr,
7    serde::{ConstBitLength, Serde},
8};
9
10// Unit //
11
12impl<T> Serde for PhantomData<T> {
13    fn ser(&self, _: &mut dyn BitWrite) {}
14
15    fn de(_: &mut BitReader) -> Result<Self, SerdeErr> {
16        Ok(Self)
17    }
18
19    fn bit_length(&self) -> u32 {
20        <Self as ConstBitLength>::const_bit_length()
21    }
22}
23
24impl<T> ConstBitLength for PhantomData<T> {
25    fn const_bit_length() -> u32 {
26        0
27    }
28}
29
30// tests
31
32#[cfg(test)]
33mod phantom_tests {
34    use crate::{bit_reader::BitReader, bit_writer::BitWriter, serde::Serde};
35    use std::marker::PhantomData;
36
37    #[test]
38    fn read_write() {
39        // Write
40        let mut writer = BitWriter::new();
41
42        let in_phantom = PhantomData::<u32>;
43
44        in_phantom.ser(&mut writer);
45
46        let buffer = writer.to_bytes();
47
48        //Read
49        let mut reader = BitReader::new(&buffer);
50
51        let out_phantom = Serde::de(&mut reader).unwrap();
52
53        assert_eq!(in_phantom, out_phantom);
54    }
55}