Function nom::bytes::streaming::take_while_m_n [−][src]
pub fn take_while_m_n<F, Input, Error: ParseError<Input>>(
m: usize,
n: usize,
cond: F
) -> impl Fn(Input) -> IResult<Input, Input, Error> where
Input: InputTake + InputIter + InputLength + Slice<RangeFrom<usize>>,
F: Fn(<Input as InputIter>::Item) -> bool,
Returns the longest (m <= len <= n) input slice that matches the predicate
The parser will return the longest slice that matches the given predicate (a function that takes the input and returns a bool)
It will return an Err::Error((_, ErrorKind::TakeWhileMN))
if the pattern wasn’t met
Streaming Specific
Streaming version will return a Err::Incomplete(Needed::Size(1))
if the pattern reaches the end of the input or is too short.
Example
use nom::bytes::streaming::take_while_m_n; use nom::character::is_alphabetic; fn short_alpha(s: &[u8]) -> IResult<&[u8], &[u8]> { take_while_m_n(3, 6, is_alphabetic)(s) } assert_eq!(short_alpha(b"latin123"), Ok((&b"123"[..], &b"latin"[..]))); assert_eq!(short_alpha(b"lengthy"), Ok((&b"y"[..], &b"length"[..]))); assert_eq!(short_alpha(b"latin"), Err(Err::Incomplete(Needed::Size(1)))); assert_eq!(short_alpha(b"ed"), Err(Err::Incomplete(Needed::Size(1)))); assert_eq!(short_alpha(b"12345"), Err(Err::Error((&b"12345"[..], ErrorKind::TakeWhileMN))));