Function nom::bits::complete::take [−][src]
pub fn take<I, O, C, E: ParseError<(I, usize)>>(
count: C
) -> impl Fn((I, usize)) -> IResult<(I, usize), O, E> where
I: Slice<RangeFrom<usize>> + InputIter<Item = u8> + InputLength,
C: ToUsize,
O: From<u8> + AddAssign + Shl<usize, Output = O> + Shr<usize, Output = O>,
Expand description
Generates a parser taking count
bits
Example
// Input is a tuple of (input: I, bit_offset: usize) fn parser(input: (&[u8], usize), count: usize)-> IResult<(&[u8], usize), u8> { take(count)(input) } // Consumes 0 bits, returns 0 assert_eq!(parser(([0x12].as_ref(), 0), 0), Ok((([0x12].as_ref(), 0), 0))); // Consumes 4 bits, returns their values and increase offset to 4 assert_eq!(parser(([0x12].as_ref(), 0), 4), Ok((([0x12].as_ref(), 4), 0x01))); // Consumes 4 bits, offset is 4, returns their values and increase offset to 0 of next byte assert_eq!(parser(([0x12].as_ref(), 4), 4), Ok((([].as_ref(), 0), 0x02))); // Tries to consume 12 bits but only 8 are available assert_eq!(parser(([0x12].as_ref(), 0), 12), Err(nom::Err::Error(Error{input: ([0x12].as_ref(), 0), code: ErrorKind::Eof })));