[−][src]Macro nom::try_parse
A bit like std::try!, this macro will return the remaining input and parsed value if the child parser returned Done,
and will do an early return for Error and Incomplete
this can provide more flexibility than do_parse! if needed
fn take_add(input:&[u8], size: u8) -> IResult<&[u8],&[u8]> { let (i1, sz) = try_parse!(input, be_u8); let (i2, length) = try_parse!(i1, expr_opt!(size.checked_add(sz))); let (i3, data) = try_parse!(i2, take!(length)); return Done(i3, data); } let arr1 = [1, 2, 3, 4, 5]; let r1 = take_add(&arr1[..], 1); assert_eq!(r1, Done(&[4,5][..], &[2,3][..])); let arr2 = [0xFE, 2, 3, 4, 5]; // size is overflowing let r1 = take_add(&arr2[..], 42); assert_eq!(r1, Error(error_position!(ErrorKind::ExprOpt,&[2,3,4,5][..])));