diff options
Diffstat (limited to 'vendor/winnow/src/sequence')
-rw-r--r-- | vendor/winnow/src/sequence/mod.rs | 169 | ||||
-rw-r--r-- | vendor/winnow/src/sequence/tests.rs | 211 |
2 files changed, 0 insertions, 380 deletions
diff --git a/vendor/winnow/src/sequence/mod.rs b/vendor/winnow/src/sequence/mod.rs deleted file mode 100644 index 68f772384..000000000 --- a/vendor/winnow/src/sequence/mod.rs +++ /dev/null @@ -1,169 +0,0 @@ -//! Combinators applying parsers in sequence - -#[cfg(test)] -mod tests; - -use crate::error::ParseError; -use crate::stream::Stream; -use crate::trace::trace; -use crate::Parser; - -/// Apply two parsers, only returning the output from the second. -/// -/// # Arguments -/// * `first` The opening parser. -/// * `second` The second parser to get object. -/// -/// # Example -/// -/// ```rust -/// # use winnow::{error::ErrMode, error::ErrorKind, error::Error, error::Needed}; -/// # use winnow::prelude::*; -/// # use winnow::error::Needed::Size; -/// use winnow::sequence::preceded; -/// use winnow::bytes::tag; -/// -/// let mut parser = preceded("abc", "efg"); -/// -/// assert_eq!(parser.parse_next("abcefg"), Ok(("", "efg"))); -/// assert_eq!(parser.parse_next("abcefghij"), Ok(("hij", "efg"))); -/// assert_eq!(parser.parse_next(""), Err(ErrMode::Backtrack(Error::new("", ErrorKind::Tag)))); -/// assert_eq!(parser.parse_next("123"), Err(ErrMode::Backtrack(Error::new("123", ErrorKind::Tag)))); -/// ``` -#[doc(alias = "ignore_then")] -pub fn preceded<I, O1, O2, E: ParseError<I>, F, G>( - mut first: F, - mut second: G, -) -> impl Parser<I, O2, E> -where - I: Stream, - F: Parser<I, O1, E>, - G: Parser<I, O2, E>, -{ - trace("preceded", move |input: I| { - let (input, _) = first.parse_next(input)?; - second.parse_next(input) - }) -} - -/// Apply two parsers, only returning the output of the first. -/// -/// # Arguments -/// * `first` The first parser to apply. -/// * `second` The second parser to match an object. -/// -/// # Example -/// -/// ```rust -/// # use winnow::{error::ErrMode, error::ErrorKind, error::Error, error::Needed}; -/// # use winnow::prelude::*; -/// # use winnow::error::Needed::Size; -/// use winnow::sequence::terminated; -/// use winnow::bytes::tag; -/// -/// let mut parser = terminated("abc", "efg"); -/// -/// assert_eq!(parser.parse_next("abcefg"), Ok(("", "abc"))); -/// assert_eq!(parser.parse_next("abcefghij"), Ok(("hij", "abc"))); -/// assert_eq!(parser.parse_next(""), Err(ErrMode::Backtrack(Error::new("", ErrorKind::Tag)))); -/// assert_eq!(parser.parse_next("123"), Err(ErrMode::Backtrack(Error::new("123", ErrorKind::Tag)))); -/// ``` -#[doc(alias = "then_ignore")] -pub fn terminated<I, O1, O2, E: ParseError<I>, F, G>( - mut first: F, - mut second: G, -) -> impl Parser<I, O1, E> -where - I: Stream, - F: Parser<I, O1, E>, - G: Parser<I, O2, E>, -{ - trace("terminated", move |input: I| { - let (input, o1) = first.parse_next(input)?; - second.parse_next(input).map(|(i, _)| (i, o1)) - }) -} - -/// Apply three parsers, only returning the values of the first and third. -/// -/// # Arguments -/// * `first` The first parser to apply. -/// * `sep` The separator parser to apply. -/// * `second` The second parser to apply. -/// -/// # Example -/// -/// ```rust -/// # use winnow::{error::ErrMode, error::ErrorKind, error::Error, error::Needed}; -/// # use winnow::error::Needed::Size; -/// # use winnow::prelude::*; -/// use winnow::sequence::separated_pair; -/// use winnow::bytes::tag; -/// -/// let mut parser = separated_pair("abc", "|", "efg"); -/// -/// assert_eq!(parser.parse_next("abc|efg"), Ok(("", ("abc", "efg")))); -/// assert_eq!(parser.parse_next("abc|efghij"), Ok(("hij", ("abc", "efg")))); -/// assert_eq!(parser.parse_next(""), Err(ErrMode::Backtrack(Error::new("", ErrorKind::Tag)))); -/// assert_eq!(parser.parse_next("123"), Err(ErrMode::Backtrack(Error::new("123", ErrorKind::Tag)))); -/// ``` -pub fn separated_pair<I, O1, O2, O3, E: ParseError<I>, F, G, H>( - mut first: F, - mut sep: G, - mut second: H, -) -> impl Parser<I, (O1, O3), E> -where - I: Stream, - F: Parser<I, O1, E>, - G: Parser<I, O2, E>, - H: Parser<I, O3, E>, -{ - trace("separated_pair", move |input: I| { - let (input, o1) = first.parse_next(input)?; - let (input, _) = sep.parse_next(input)?; - second.parse_next(input).map(|(i, o2)| (i, (o1, o2))) - }) -} - -/// Apply three parsers, only returning the output of the second. -/// -/// # Arguments -/// * `first` The first parser to apply and discard. -/// * `second` The second parser to apply. -/// * `third` The third parser to apply and discard. -/// -/// # Example -/// -/// ```rust -/// # use winnow::{error::ErrMode, error::ErrorKind, error::Error, error::Needed}; -/// # use winnow::error::Needed::Size; -/// # use winnow::prelude::*; -/// use winnow::sequence::delimited; -/// use winnow::bytes::tag; -/// -/// let mut parser = delimited("(", "abc", ")"); -/// -/// assert_eq!(parser.parse_next("(abc)"), Ok(("", "abc"))); -/// assert_eq!(parser.parse_next("(abc)def"), Ok(("def", "abc"))); -/// assert_eq!(parser.parse_next(""), Err(ErrMode::Backtrack(Error::new("", ErrorKind::Tag)))); -/// assert_eq!(parser.parse_next("123"), Err(ErrMode::Backtrack(Error::new("123", ErrorKind::Tag)))); -/// ``` -#[doc(alias = "between")] -#[doc(alias = "padded")] -pub fn delimited<I, O1, O2, O3, E: ParseError<I>, F, G, H>( - mut first: F, - mut second: G, - mut third: H, -) -> impl Parser<I, O2, E> -where - I: Stream, - F: Parser<I, O1, E>, - G: Parser<I, O2, E>, - H: Parser<I, O3, E>, -{ - trace("delimited", move |input: I| { - let (input, _) = first.parse_next(input)?; - let (input, o2) = second.parse_next(input)?; - third.parse_next(input).map(|(i, _)| (i, o2)) - }) -} diff --git a/vendor/winnow/src/sequence/tests.rs b/vendor/winnow/src/sequence/tests.rs deleted file mode 100644 index 77fa75df6..000000000 --- a/vendor/winnow/src/sequence/tests.rs +++ /dev/null @@ -1,211 +0,0 @@ -use super::*; - -use crate::error::{ErrMode, ErrorKind, Needed}; -use crate::IResult; -use crate::Partial; - -#[derive(PartialEq, Eq, Debug)] -struct B { - a: u8, - b: u8, -} - -#[derive(PartialEq, Eq, Debug)] -struct C { - a: u8, - b: Option<u8>, -} - -#[test] -fn complete() { - fn err_test(i: &[u8]) -> IResult<&[u8], &[u8]> { - let (i, _) = "ijkl".parse_next(i)?; - "mnop".parse_next(i) - } - let a = &b"ijklmn"[..]; - - let res_a = err_test(a); - assert_eq!( - res_a, - Err(ErrMode::Backtrack(error_position!( - &b"mn"[..], - ErrorKind::Tag - ))) - ); -} - -#[test] -fn separated_pair_test() { - #[allow(clippy::type_complexity)] - fn sep_pair_abc_def(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, (&[u8], &[u8])> { - separated_pair("abc", ",", "def").parse_next(i) - } - - assert_eq!( - sep_pair_abc_def(Partial::new(&b"abc,defghijkl"[..])), - Ok((Partial::new(&b"ghijkl"[..]), (&b"abc"[..], &b"def"[..]))) - ); - assert_eq!( - sep_pair_abc_def(Partial::new(&b"ab"[..])), - Err(ErrMode::Incomplete(Needed::new(1))) - ); - assert_eq!( - sep_pair_abc_def(Partial::new(&b"abc,d"[..])), - Err(ErrMode::Incomplete(Needed::new(2))) - ); - assert_eq!( - sep_pair_abc_def(Partial::new(&b"xxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - sep_pair_abc_def(Partial::new(&b"xxx,def"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx,def"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - sep_pair_abc_def(Partial::new(&b"abc,xxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx"[..]), - ErrorKind::Tag - ))) - ); -} - -#[test] -fn preceded_test() { - fn preceded_abcd_efgh(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, &[u8]> { - preceded("abcd", "efgh").parse_next(i) - } - - assert_eq!( - preceded_abcd_efgh(Partial::new(&b"abcdefghijkl"[..])), - Ok((Partial::new(&b"ijkl"[..]), &b"efgh"[..])) - ); - assert_eq!( - preceded_abcd_efgh(Partial::new(&b"ab"[..])), - Err(ErrMode::Incomplete(Needed::new(2))) - ); - assert_eq!( - preceded_abcd_efgh(Partial::new(&b"abcde"[..])), - Err(ErrMode::Incomplete(Needed::new(3))) - ); - assert_eq!( - preceded_abcd_efgh(Partial::new(&b"xxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - preceded_abcd_efgh(Partial::new(&b"xxxxdef"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxxxdef"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - preceded_abcd_efgh(Partial::new(&b"abcdxxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx"[..]), - ErrorKind::Tag - ))) - ); -} - -#[test] -fn terminated_test() { - fn terminated_abcd_efgh(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, &[u8]> { - terminated("abcd", "efgh").parse_next(i) - } - - assert_eq!( - terminated_abcd_efgh(Partial::new(&b"abcdefghijkl"[..])), - Ok((Partial::new(&b"ijkl"[..]), &b"abcd"[..])) - ); - assert_eq!( - terminated_abcd_efgh(Partial::new(&b"ab"[..])), - Err(ErrMode::Incomplete(Needed::new(2))) - ); - assert_eq!( - terminated_abcd_efgh(Partial::new(&b"abcde"[..])), - Err(ErrMode::Incomplete(Needed::new(3))) - ); - assert_eq!( - terminated_abcd_efgh(Partial::new(&b"xxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - terminated_abcd_efgh(Partial::new(&b"xxxxdef"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxxxdef"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - terminated_abcd_efgh(Partial::new(&b"abcdxxxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxxx"[..]), - ErrorKind::Tag - ))) - ); -} - -#[test] -fn delimited_test() { - fn delimited_abc_def_ghi(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, &[u8]> { - delimited("abc", "def", "ghi").parse_next(i) - } - - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"abcdefghijkl"[..])), - Ok((Partial::new(&b"jkl"[..]), &b"def"[..])) - ); - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"ab"[..])), - Err(ErrMode::Incomplete(Needed::new(1))) - ); - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"abcde"[..])), - Err(ErrMode::Incomplete(Needed::new(1))) - ); - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"abcdefgh"[..])), - Err(ErrMode::Incomplete(Needed::new(1))) - ); - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"xxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"xxxdefghi"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxxdefghi"[..]), - ErrorKind::Tag - ),)) - ); - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"abcxxxghi"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxxghi"[..]), - ErrorKind::Tag - ))) - ); - assert_eq!( - delimited_abc_def_ghi(Partial::new(&b"abcdefxxx"[..])), - Err(ErrMode::Backtrack(error_position!( - Partial::new(&b"xxx"[..]), - ErrorKind::Tag - ))) - ); -} |