parent
260482290a
commit
b07b68d587
@ -0,0 +1,5 @@
|
||||
#[macro_export] macro_rules! static_assert {
|
||||
($ex:expr) => {
|
||||
const _: &[bool; ((($ex) == true) as usize)] = &[true];
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
#[allow(unused_imports)]
|
||||
use std::{
|
||||
ops::{
|
||||
Drop,
|
||||
Deref,
|
||||
DerefMut,
|
||||
},
|
||||
mem::{
|
||||
replace,
|
||||
MaybeUninit,
|
||||
},
|
||||
fmt,
|
||||
};
|
||||
|
||||
#[macro_use] mod macros; pub use macros::*;
|
||||
mod opaque; pub use opaque::*;
|
||||
mod phantom_drop; pub use phantom_drop::*;
|
@ -0,0 +1,58 @@
|
||||
use super::*;
|
||||
|
||||
/// Enabled `#[derive(Debug)]` on types with fields that are not `Debug`.
|
||||
pub struct Opaque<T>(T);
|
||||
|
||||
impl<T> Opaque<T>
|
||||
{
|
||||
/// Create a new `Opaque` wrapper around `value`.
|
||||
#[inline]
|
||||
pub const fn new(value: T) -> Self
|
||||
{
|
||||
Self(value)
|
||||
}
|
||||
|
||||
/// Consume `Opaque` and get back the inner value.
|
||||
#[inline]
|
||||
pub fn into(self) -> T
|
||||
{
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> From<T> for Opaque<T>
|
||||
{
|
||||
fn from(from: T) -> Self
|
||||
{
|
||||
Self(from)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> std::fmt::Debug for Opaque<T>
|
||||
{
|
||||
#[inline]
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result
|
||||
{
|
||||
write!(f, "<opaque type>")
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> Deref for Opaque<T>
|
||||
{
|
||||
type Target = T;
|
||||
#[inline]
|
||||
fn deref(&self) -> &Self::Target
|
||||
{
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl<T> DerefMut for Opaque<T>
|
||||
{
|
||||
#[inline]
|
||||
fn deref_mut(&mut self) -> &mut <Self as Deref>::Target
|
||||
{
|
||||
&mut self.0
|
||||
}
|
||||
}
|
Loading…
Reference in new issue