#![cfg(feature = "derive")] #![allow(dead_code)] use bytemuck::{ByteEq, ByteHash, Pod, TransparentWrapper, Zeroable}; use std::marker::PhantomData; #[derive(Copy, Clone, Pod, Zeroable, ByteEq, ByteHash)] #[repr(C)] struct Test { a: u16, b: u16, } #[derive(TransparentWrapper)] #[repr(transparent)] struct TransparentSingle { a: u16, } #[derive(TransparentWrapper)] #[repr(transparent)] #[transparent(u16)] struct TransparentWithZeroSized { a: u16, b: (), } #[derive(TransparentWrapper)] #[repr(transparent)] struct TransparentWithGeneric { a: T, } /// Ensuring that no additional bounds are emitted. /// See https://github.com/Lokathor/bytemuck/issues/145 fn test_generic(x: T) -> TransparentWithGeneric { TransparentWithGeneric::wrap(x) } #[derive(TransparentWrapper)] #[repr(transparent)] #[transparent(T)] struct TransparentWithGenericAndZeroSized { a: (), b: T, } /// Ensuring that no additional bounds are emitted. /// See https://github.com/Lokathor/bytemuck/issues/145 fn test_generic_with_zst(x: T) -> TransparentWithGenericAndZeroSized { TransparentWithGenericAndZeroSized::wrap(x) } #[derive(TransparentWrapper)] #[repr(transparent)] struct TransparentUnsized { a: dyn std::fmt::Debug, } type DynDebug = dyn std::fmt::Debug; #[derive(TransparentWrapper)] #[repr(transparent)] #[transparent(DynDebug)] struct TransparentUnsizedWithZeroSized { a: (), b: DynDebug, } #[derive(TransparentWrapper)] #[repr(transparent)] #[transparent(DynDebug)] struct TransparentUnsizedWithGenericZeroSizeds { a: PhantomData, b: PhantomData, c: DynDebug, }