Source code
Revision control
Copy as Markdown
Other Tools
#![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.↩
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.↩
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,↩
}↩