naia_serde/impls/
phantom.rs1use std::marker::PhantomData;
2
3use crate::{
4 bit_reader::BitReader,
5 bit_writer::BitWrite,
6 error::SerdeErr,
7 serde::{ConstBitLength, Serde},
8};
9
10impl<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#[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 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 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}