Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[macro_export]
- macro_rules! declare_without_padding {(
- #[repr(C)]
- $(#[$struct_meta:meta])*
- $struct_vis:vis
- struct $StructName:ident {
- $(
- $(#[$field_meta:meta])*
- $field_vis:vis
- $field_name:ident : $field_ty:ty
- ),* $(,)?
- }
- ) => (
- #[repr(C)]
- $(#[$struct_meta])*
- $struct_vis
- struct $StructName {
- $(
- $(#[$field_meta])*
- $field_vis
- $field_name: $field_ty,
- )*
- }
- const _: () = {
- trait HasNoPadding {}
- struct Struct<T> (::core::marker::PhantomData<T>);
- impl<T> HasNoPadding for [Struct<T>; 0] {}
- fn assert_no_padding<T>() where
- T : HasNoPadding,
- {}
- const HAS_PADDING: bool = {
- ::core::mem::size_of::<$StructName>()
- >
- (0 $(+ ::core::mem::size_of::<$field_ty>())*)
- };
- let _ = assert_no_padding::<[Struct<$StructName>;
- HAS_PADDING
- as usize]>;
- };
- )}
- declare_without_padding! {
- #[repr(C)]
- struct Foo {
- a: u8,
- b: u16,
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement