1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
use super::packing::*; impl PackedStruct<[u8; 1]> for bool { #[inline] fn pack(&self) -> [u8; 1] { if *self { [1] } else { [0] } } #[inline] fn unpack(src: &[u8; 1]) -> Result<bool, PackingError> { match src[0] { 1 => Ok(true), 0 => Ok(false), _ => Err(PackingError::InvalidValue) } } } impl PackedStructInfo for bool { #[inline] fn packed_bits() -> usize { 1 } } packing_slice!(bool; 1); impl PackedStruct<[u8; 1]> for u8 { #[inline] fn pack(&self) -> [u8; 1] { [*self] } #[inline] fn unpack(src: &[u8; 1]) -> Result<u8, PackingError> { Ok(src[0]) } } impl PackedStructInfo for u8 { #[inline] fn packed_bits() -> usize { 8 } } packing_slice!(u8; 1); impl PackedStruct<[u8; 1]> for i8 { #[inline] fn pack(&self) -> [u8; 1] { [*self as u8] } #[inline] fn unpack(src: &[u8; 1]) -> Result<i8, PackingError> { Ok(src[0] as i8) } } impl PackedStructInfo for i8 { #[inline] fn packed_bits() -> usize { 8 } } packing_slice!(i8; 1); impl PackedStruct<[u8; 0]> for () { #[inline] fn pack(&self) -> [u8; 0] { [] } #[inline] fn unpack(_src: &[u8; 0]) -> Result<(), PackingError> { Ok(()) } } impl PackedStructInfo for () { #[inline] fn packed_bits() -> usize { 0 } }