wiwi_memory_usage/impls/
marker.rs1use crate::macros::{ impl_memory_usage_static, impl_memory_usage_size_of };
2use core::marker::*;
3
4impl_memory_usage_static! {
5 { T: ?Sized }
6 PhantomData<T>
7 => size_of::<PhantomData<T>>();
8}
9
10impl_memory_usage_size_of! {
11 PhantomPinned
12}
13
14#[cfg(feature = "nightly")]
15impl_memory_usage_static! {
16 { T: ?Sized }
17 PhantomCovariant<T>
18 => size_of::<PhantomCovariant<T>>();
19}
20
21#[cfg(feature = "nightly")]
22impl_memory_usage_static! {
23 { 'h }
24 PhantomCovariantLifetime<'h>
25 => size_of::<PhantomCovariantLifetime<'h>>();
26}
27
28#[cfg(feature = "nightly")]
29impl_memory_usage_static! {
30 { T: ?Sized }
31 PhantomContravariant<T>
32 => size_of::<PhantomContravariant<T>>();
33}
34
35#[cfg(feature = "nightly")]
36impl_memory_usage_static! {
37 { 'h }
38 PhantomContravariantLifetime<'h>
39 => size_of::<PhantomContravariantLifetime<'h>>();
40}
41
42#[cfg(feature = "nightly")]
43impl_memory_usage_static! {
44 { T: ?Sized }
45 PhantomInvariant<T>
46 => size_of::<PhantomInvariant<T>>();
47}
48
49#[cfg(feature = "nightly")]
50impl_memory_usage_static! {
51 { 'h }
52 PhantomInvariantLifetime<'h>
53 => size_of::<PhantomInvariantLifetime<'h>>();
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59 use crate::{
60 MemoryUsage as _,
61 MemoryUsageStatic as _
62 };
63
64 #[test]
65 fn phantom_data_usage() {
66 let phantom = PhantomData::<usize>;
67
68 assert_eq!(phantom.memory_usage(), 0);
69 assert_eq!(<PhantomData<usize>>::MEMORY_USAGE, 0);
70 }
71
72 #[cfg(feature = "nightly")]
73 macro_rules! phantom_data_variance_usage {
74 { $($test_name:ident($ty:path))* } => {
75 $(
76 #[test]
77 fn $test_name() {
78 let phantom: $ty = variance();
79
80 assert_eq!(phantom.memory_usage(), 0);
81 assert_eq!(<$ty>::MEMORY_USAGE, 0);
82 }
83 )*
84 }
85 }
86
87 #[cfg(feature = "nightly")]
88 phantom_data_variance_usage! {
89 phantom_covariant_usage(PhantomCovariant<usize>)
90 phantom_covariant_lifetime_usage(PhantomCovariantLifetime<'static>)
91
92 phantom_contravariant_usage(PhantomContravariant<usize>)
93 phantom_contravariant_lifetime_usage(PhantomContravariantLifetime<'static>)
94
95 phantom_invariant_usage(PhantomInvariant<usize>)
96 phantom_invariant_lifetime_usage(PhantomInvariantLifetime<'static>)
97 }
98}