use core::ops::{ Deref };
pub trait IntoRef< 'a, T, Marker >
{
fn into_ref( self ) -> Ref< 'a, T, Marker >;
}
impl< 'a, T, Marker > IntoRef< 'a, T, Marker > for &'a T
{
#[ inline( always ) ]
fn into_ref( self ) -> Ref< 'a, T, Marker >
{
Ref::< 'a, T, Marker >::new( self )
}
}
#[ allow( missing_debug_implementations ) ]
#[ repr( transparent ) ]
pub struct Ref< 'a, T, Marker >( pub &'a T, ::core::marker::PhantomData< fn() -> Marker > )
where
::core::marker::PhantomData< fn( Marker ) > : Copy,
&'a T : Copy,
;
impl< 'a, T, Marker > Clone for Ref< 'a, T, Marker >
{
#[ inline( always ) ]
fn clone( &self ) -> Self
{
Self::new( self.0 )
}
}
impl< 'a, T, Marker > Copy for Ref< 'a, T, Marker > {}
impl< 'a, T, Marker > Ref< 'a, T, Marker >
{
#[ inline( always ) ]
pub fn new( src : &'a T ) -> Self
{
Self( src, ::core::marker::PhantomData )
}
#[ inline( always ) ]
pub fn inner( self ) -> &'a T
{
self.0
}
}
impl< 'a, T, Marker > AsRef< T > for Ref< 'a, T, Marker >
{
fn as_ref( &self ) -> &T
{
&self.0
}
}
impl< 'a, T, Marker > Deref for Ref< 'a, T, Marker >
{
type Target = T;
fn deref( &self ) -> &Self::Target
{
&self.0
}
}
impl< 'a, T, Marker > From< &'a T > for Ref< 'a, T, Marker >
{
fn from( src : &'a T ) -> Self
{
Ref::new( src )
}
}