# Function nom::bytes::streaming::take_while_m_n

source · [−]

    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,
        F: Fn(<Input as InputIter>::Item) -> bool,

Expand description

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::new(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::new(1))));
    assert_eq!(short_alpha(b"ed"), Err(Err::Incomplete(Needed::new(1))));
    assert_eq!(short_alpha(b"12345"), Err(Err::Error(Error::new(&b"12345"[..], ErrorKind::TakeWhileMN))));