pod 0.5.0

Plain Old Data (POD) encoding and I/O
Documentation
extern crate pod;

use pod::Pod;

#[repr(C)]
struct Unaligned {
    _pad0: u8,
    value: [u8; 2],
    _pad1: u8,
    _align: u32,
}

#[test]
fn test_map() {
    let mut un = Unaligned {
        _pad0: 0,
        value: [1, 1],
        _pad1: 0,
        _align: 0,
    };
    let un = &mut un.value;

    assert!(0u16.map::<u8>().is_none());
    assert!(0u16.map_mut::<u8>().is_none());
    assert!(0u16.map_copy::<u8>().is_none());
    assert!(0u16.try_map::<u8>().unwrap() == &0);
    assert!(0u16.try_map_mut::<u8>().unwrap() == &mut 0);
    assert!(Pod::map_box::<u8>(Box::new(0u16)).is_err());

    assert!(0u16.map::<u32>().is_none());
    assert!(0u16.map_mut::<u32>().is_none());
    assert!(0u16.map_copy::<u32>().is_none());
    assert!(0u16.try_map::<u32>().is_none());
    assert!(0u16.try_map_mut::<u32>().is_none());
    assert!(Pod::map_box::<u32>(Box::new(0u16)).is_err());

    assert!(0xffu16.map::<i16>().unwrap() == &0xffi16);
    assert!(0xffu16.map_mut::<i16>().unwrap() == &mut 0xffi16);
    assert!(0xffu16.map_copy::<i16>().unwrap() == 0xffi16);
    assert!(0xffu16.try_map::<i16>().unwrap() == &0xff);
    assert!(0xffu16.try_map_mut::<i16>().unwrap() == &mut 0xff);
    assert!(*Pod::map_box::<i16>(Box::new(0xffu16)).unwrap() == 0xff);

    assert!(un.map::<i16>().is_none());
    assert!(un.map_mut::<i16>().is_none());
    assert!(un.map_copy::<i16>().unwrap() == 0x0101i16);
    assert!(un.try_map::<i16>().is_none());
    assert!(un.try_map_mut::<i16>().is_none());
}