use core::fmt;
use crate::error::IntoRepr;
use crate::pointer::Packable;
use crate::traits::ZeroCopy;
mod sealed {
use crate::mem::MaybeUninit;
use crate::pointer::Pointee;
use crate::traits::ZeroCopy;
pub trait Sealed {}
impl<T> Sealed for MaybeUninit<T> where T: Pointee {}
impl<T> Sealed for T where T: ZeroCopy {}
impl<T> Sealed for [T] where T: ZeroCopy {}
impl Sealed for str {}
}
pub trait Pointee: self::sealed::Sealed {
type Metadata: Copy + fmt::Debug + Packable + IntoRepr;
}
impl<T> Pointee for T
where
T: ZeroCopy,
{
type Metadata = ();
}
impl<T> Pointee for [T]
where
T: ZeroCopy,
{
type Metadata = usize;
}
impl Pointee for str {
type Metadata = usize;
}