pub fn segment_data<'a, I>() -> impl Parser<Input = I, Output = &'a [u8]> + 'awhere
I: RangeStream<Item = u8, Range = &'a [u8]> + 'a,
I::Error: ParseError<I::Item, I::Range, I::Position>,Expand description
Parses out an entropy-encoded data section, including 0xFF padding.
use exifsd::*;
use combine::*;
let result = segment_data().parse(&[0x01, 0xFF, 0x00, 0x02, 0xFF, 0xFF, 0xD9][..]);
// Note that the marker `[0xFF, 0xD9]` is not consumed.
assert_eq!(result, Ok(((&[0x01, 0xFF, 0x00, 0x02, 0xFF][..]), &[0xFF, 0xD9][..])));
let result = segment_data().parse(&[0x01, 0xFF, 0x00, 0x02, 0xFF, 0xFF, 0x00][..]);
// Note that the marker `[0xFF, 0x00]` is not consumed because it follows the padding.
assert_eq!(result, Ok(((&[0x01, 0xFF, 0x00, 0x02, 0xFF][..]), &[0xFF, 0x00][..])));