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
use nom::{le_u8, le_u16, le_u32, le_u64, le_i16, le_i32}; use super::GUID; named_args!(pub check_guid(guid: GUID)<GUID>, verify!(parse_guid, |x| x == guid) ); named!(pub parse_guid<GUID>, do_parse!( d1: le_u32 >> d2: le_u16 >> d3: le_u16 >> d4: le_u64 >> (GUID(d1,d2,d3,d4)) ) ); named_args!(pub align<'a>(offset: &'a mut usize, count: usize)<usize>, do_parse!( p1: value!(*offset % count) >> p2: value!(if p1 == 0 { 0 } else { count - p1 }) >> take!(p2) >> ({*offset += p2; *offset}) ) ); named_args!(pub aligned_le_u32<'a>(offset: &'a mut usize)<u32>, do_parse!( call!(align, offset, 4) >> val: map!(le_u32, |x| { *offset += 4; x }) >> (val) ) ); named_args!(pub aligned_le_i32<'a>(offset: &'a mut usize)<i32>, do_parse!( call!(align, offset, 4) >> val: map!(le_i32, |x| { *offset += 4; x }) >> (val) ) ); named_args!(pub aligned_le_u16<'a>(offset: &'a mut usize)<u16>, do_parse!( call!(align, offset, 2) >> val: map!(le_u16, |x| { *offset += 2; x }) >> (val) ) ); named_args!(pub aligned_le_i16<'a>(offset: &'a mut usize)<i16>, do_parse!( call!(align, offset, 2) >> val: map!(le_i16, |x| { *offset += 2; x }) >> (val) ) ); named_args!(pub aligned_le_u8<'a>(offset: &'a mut usize)<u8>, map!(le_u8, |x| { *offset += 1; x }) );