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