mod private
{
pub use bytemuck::
{
Pod,
};
pub trait AsBytes
{
fn as_bytes( &self ) -> &[ u8 ]
;
#[ inline ]
fn to_bytes_vec( &self ) -> Vec< u8 >
{
self.as_bytes().to_vec()
}
#[ inline ]
fn byte_size( &self ) -> usize
{
self.as_bytes().len()
}
fn len( &self ) -> usize;
}
impl< T : Pod > AsBytes for ( T, )
{
#[ inline ]
fn as_bytes( &self ) -> &[ u8 ]
{
bytemuck::bytes_of( &self.0 )
}
#[ inline ]
fn byte_size( &self ) -> usize
{
std::mem::size_of::< T >()
}
#[ inline ]
fn len( &self ) -> usize
{
1
}
}
impl< T : Pod > AsBytes for Vec< T >
{
#[ inline ]
fn as_bytes( &self ) -> &[ u8 ]
{
bytemuck::cast_slice( self )
}
#[ inline ]
fn byte_size( &self ) -> usize
{
self.len() * std::mem::size_of::< T >()
}
#[ inline ]
fn len( &self ) -> usize
{
self.len()
}
}
impl< T : Pod > AsBytes for [ T ]
{
#[ inline ]
fn as_bytes( &self ) -> &[ u8 ]
{
bytemuck::cast_slice( self )
}
#[ inline ]
fn byte_size( &self ) -> usize
{
self.len() * std::mem::size_of::< T >()
}
#[ inline ]
fn len( &self ) -> usize
{
self.len()
}
}
impl< T : Pod, const N : usize > AsBytes for [ T ; N ]
{
#[ inline ]
fn as_bytes( &self ) -> &[ u8 ]
{
bytemuck::cast_slice( self )
}
#[ inline ]
fn byte_size( &self ) -> usize
{
N * std::mem::size_of::< T >()
}
#[ inline ]
fn len( &self ) -> usize
{
N
}
}
}
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use own::*;
#[ allow( unused_imports ) ]
pub mod own
{
use super::*;
#[ doc( inline ) ]
pub use orphan::*;
}
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use own::*;
#[ allow( unused_imports ) ]
pub mod orphan
{
use super::*;
#[ doc( inline ) ]
pub use exposed::*;
}
#[ allow( unused_imports ) ]
pub mod exposed
{
use super::*;
#[ doc( inline ) ]
pub use prelude::*;
}
#[ allow( unused_imports ) ]
pub mod prelude
{
use super::*;
pub use private::AsBytes;
}