1#[cfg(feature = "extra_traits")]
4use core::hash::Hash;
5use core::mem::MaybeUninit;
6
7use crate::prelude::*;
8
9#[allow(dead_code)]
15#[repr(transparent)]
16#[derive(Clone, Copy)]
17pub(crate) struct Padding<T: Copy>(MaybeUninit<T>);
18
19impl<T: Copy> Default for Padding<T> {
20 fn default() -> Self {
21 Self(MaybeUninit::zeroed())
22 }
23}
24
25impl<T: Copy> Padding<T> {
26 #[allow(dead_code)]
28 pub(crate) const fn new(val: T) -> Self {
29 Self(MaybeUninit::new(val))
30 }
31}
32
33impl<T: Copy> fmt::Debug for Padding<T> {
34 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35 let full_name = core::any::type_name::<Self>();
38 let prefix_len = full_name.find("Padding").unwrap();
39 f.pad(&full_name[prefix_len..])
40 }
41}
42
43#[cfg(feature = "extra_traits")]
45impl<T: Copy> Hash for Padding<T> {
46 fn hash<H: hash::Hasher>(&self, _state: &mut H) {}
47}
48
49#[cfg(feature = "extra_traits")]
51impl<T: Copy> PartialEq for Padding<T> {
52 fn eq(&self, _other: &Self) -> bool {
53 true
54 }
55}
56
57#[cfg(feature = "extra_traits")]
59impl<T: Copy> Eq for Padding<T> {}
60
61#[cfg(target_env = "msvc")]
63#[allow(unused)]
64pub(crate) type CEnumRepr = c_int;
65#[cfg(not(target_env = "msvc"))]
66#[allow(unused)]
67pub(crate) type CEnumRepr = c_uint;