You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
use bytecheck::{CheckBytes, check_bytes, rancor::Failure};#[derive(CheckBytes,Debug)]#[repr(C)]structTest{a:u32,b:char,c:bool,}#[repr(C, align(4))]structAligned<constN:usize>([u8;N]);macro_rules! bytes {($($byte:literal,)*) => {(&Aligned([$($byte,)*]).0as&[u8]).as_ptr()};($($byte:literal),*) => {
bytes!($($byte,)*)};}// In this example, the architecture is assumed to be little-endian#[cfg(target_endian = "little")]unsafe{// These are valid bytes for a `Test`check_bytes::<Test,Failure>(bytes![0u8,0u8,0u8,0u8,0x78u8,0u8,0u8,0u8,1u8,255u8,255u8,255u8,].cast()).unwrap();// Changing the bytes for the u32 is OK, any bytes are a valid u32check_bytes::<Test,Failure>(bytes![42u8,16u8,20u8,3u8,0x78u8,0u8,0u8,0u8,1u8,255u8,255u8,255u8,].cast()).unwrap();// Characters outside the valid ranges are invalidcheck_bytes::<Test,Failure>(bytes![0u8,0u8,0u8,0u8,0x00u8,0xd8u8,0u8,0u8,1u8,255u8,255u8,255u8,].cast()).unwrap_err();check_bytes::<Test,Failure>(bytes![0u8,0u8,0u8,0u8,0x00u8,0x00u8,0x11u8,0u8,1u8,255u8,255u8,255u8,].cast()).unwrap_err();// 0 is a valid boolean value (false) but 2 is notcheck_bytes::<Test,Failure>(bytes![0u8,0u8,0u8,0u8,0x78u8,0u8,0u8,0u8,0u8,255u8,255u8,255u8,].cast()).unwrap();check_bytes::<Test,Failure>(bytes![0u8,0u8,0u8,0u8,0x78u8,0u8,0u8,0u8,2u8,255u8,255u8,255u8,].cast()).unwrap_err();}