#![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<T: ?Sized> { a: T, } /// Ensuring that no additional bounds are emitted. /// See https://github.com/Lokathor/bytemuck/issues/145 fn test_generic<T>(x: T) -> TransparentWithGeneric<T> { TransparentWithGeneric::wrap(x) } #[derive(TransparentWrapper)] #[repr(transparent)] #[transparent(T)] struct TransparentWithGenericAndZeroSized<T: ?Sized> { a: (), b: T, } /// Ensuring that no additional bounds are emitted. /// See https://github.com/Lokathor/bytemuck/issues/145 fn test_generic_with_zst<T>(x: T) -> TransparentWithGenericAndZeroSized<T> { 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<T: ?Sized, U: ?Sized> { a: PhantomData<T>, b: PhantomData<U>, c: DynDebug, }