pub fn length_prefix<Input, P>(len: P) -> length_prefix<Input, P> where
<Input as StreamOnce>::Error: ParseError<<Input as StreamOnce>::Token, <Input as StreamOnce>::Range, <Input as StreamOnce>::Position>,
Input: Stream,
Input: RangeStream,
P: Parser<Input>,
usize: TryFrom<P::Output>,
<usize as TryFrom<P::Output>>::Error: StdError + Send + Sync + 'static,
Expand description
Takes a parser which parses a length
then extracts a range of that length and returns it.
Commonly used in binary formats
let mut input = Vec::new();
input.extend_from_slice(&3u16.to_be_bytes());
input.extend_from_slice(b"1234");
let mut parser = length_prefix(be_u16());
let result = parser.parse(&input[..]);
assert_eq!(result, Ok((&b"123"[..], &b"4"[..])));