1 #![cfg(feature = "derive")]
2 #![allow(dead_code)]
3 
4 use bytemuck::{ByteEq, ByteHash, Pod, TransparentWrapper, Zeroable};
5 use std::marker::PhantomData;
6 
7 #[derive(Copy, Clone, Pod, Zeroable, ByteEq, ByteHash)]
8 #[repr(C)]
9 struct Test {
10   a: u16,
11   b: u16,
12 }
13 
14 #[derive(TransparentWrapper)]
15 #[repr(transparent)]
16 struct TransparentSingle {
17   a: u16,
18 }
19 
20 #[derive(TransparentWrapper)]
21 #[repr(transparent)]
22 #[transparent(u16)]
23 struct TransparentWithZeroSized {
24   a: u16,
25   b: (),
26 }
27 
28 #[derive(TransparentWrapper)]
29 #[repr(transparent)]
30 struct TransparentWithGeneric<T: ?Sized> {
31   a: T,
32 }
33 
34 /// Ensuring that no additional bounds are emitted.
35 /// See https://github.com/Lokathor/bytemuck/issues/145
test_generic<T>(x: T) -> TransparentWithGeneric<T>36 fn test_generic<T>(x: T) -> TransparentWithGeneric<T> {
37   TransparentWithGeneric::wrap(x)
38 }
39 
40 #[derive(TransparentWrapper)]
41 #[repr(transparent)]
42 #[transparent(T)]
43 struct TransparentWithGenericAndZeroSized<T: ?Sized> {
44   a: (),
45   b: T,
46 }
47 
48 /// Ensuring that no additional bounds are emitted.
49 /// See https://github.com/Lokathor/bytemuck/issues/145
test_generic_with_zst<T>(x: T) -> TransparentWithGenericAndZeroSized<T>50 fn test_generic_with_zst<T>(x: T) -> TransparentWithGenericAndZeroSized<T> {
51   TransparentWithGenericAndZeroSized::wrap(x)
52 }
53 
54 #[derive(TransparentWrapper)]
55 #[repr(transparent)]
56 struct TransparentUnsized {
57   a: dyn std::fmt::Debug,
58 }
59 
60 type DynDebug = dyn std::fmt::Debug;
61 
62 #[derive(TransparentWrapper)]
63 #[repr(transparent)]
64 #[transparent(DynDebug)]
65 struct TransparentUnsizedWithZeroSized {
66   a: (),
67   b: DynDebug,
68 }
69 
70 #[derive(TransparentWrapper)]
71 #[repr(transparent)]
72 #[transparent(DynDebug)]
73 struct TransparentUnsizedWithGenericZeroSizeds<T: ?Sized, U: ?Sized> {
74   a: PhantomData<T>,
75   b: PhantomData<U>,
76   c: DynDebug,
77 }
78