#![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, | |
} |