Function nom::bits::bits [−][src]
pub fn bits<I, O, E1, E2, P>(parser: P) -> impl FnMut(I) -> IResult<I, O, E2> where
E1: ParseError<(I, usize)> + ErrorConvert<E2>,
E2: ParseError<I>,
I: Slice<RangeFrom<usize>>,
P: FnMut((I, usize)) -> IResult<(I, usize), O, E1>,
Expand description
Converts a byte-level input to a bit-level input, for consumption by a parser that uses bits.
Afterwards, the input is converted back to a byte-level parser, with any remaining bits thrown away.
Example
use nom::bits::{bits, streaming::take}; use nom::error::Error; use nom::sequence::tuple; use nom::IResult; fn parse(input: &[u8]) -> IResult<&[u8], (u8, u8)> { bits::<_, _, Error<(&[u8], usize)>, _, _>(tuple((take(4usize), take(8usize))))(input) } let input = &[0x12, 0x34, 0xff, 0xff]; let output = parse(input).expect("We take 1.5 bytes and the input is longer than 2 bytes"); // The first byte is consumed, the second byte is partially consumed and dropped. let remaining = output.0; assert_eq!(remaining, [0xff, 0xff]); let parsed = output.1; assert_eq!(parsed.0, 0x01); assert_eq!(parsed.1, 0x23);