switched error then succeess cases

This commit is contained in:
Trevor Settles 2024-03-24 20:13:58 -06:00
parent ab744a883a
commit ef68183a92
No known key found for this signature in database
GPG key ID: F46B83058222DBAA

View file

@ -976,14 +976,16 @@ where
/// # let arena = Bump::new(); /// # let arena = Bump::new();
/// let parser = keyword_e("when", Problem::NotFound); /// let parser = keyword_e("when", Problem::NotFound);
/// ///
/// let (progress, err) = parser.parse(&arena, State::new("whence".as_bytes()), 0).unwrap_err(); /// // Success case
/// assert_eq!(progress, Progress::NoProgress);
/// assert_eq!(err, Problem::NotFound(Position::zero()));
///
/// let (progress, output, state) = parser.parse(&arena, State::new("when".as_bytes()), 0).unwrap(); /// let (progress, output, state) = parser.parse(&arena, State::new("when".as_bytes()), 0).unwrap();
/// assert_eq!(progress, Progress::MadeProgress); /// assert_eq!(progress, Progress::MadeProgress);
/// assert_eq!(output, ()); /// assert_eq!(output, ());
/// assert_eq!(state.pos().offset, 4); /// assert_eq!(state.pos().offset, 4);
///
/// Error case
/// let (progress, err) = parser.parse(&arena, State::new("whence".as_bytes()), 0).unwrap_err();
/// assert_eq!(progress, Progress::NoProgress);
/// assert_eq!(err, Problem::NotFound(Position::zero()));
/// ``` /// ```
pub fn keyword_e<'a, ToError, E>(keyword: &'static str, if_error: ToError) -> impl Parser<'a, (), E> pub fn keyword_e<'a, ToError, E>(keyword: &'static str, if_error: ToError) -> impl Parser<'a, (), E>
where where
@ -1284,15 +1286,17 @@ where
/// # let arena = Bump::new(); /// # let arena = Bump::new();
/// let parser = optional(word("hello", Problem::NotFound)); /// let parser = optional(word("hello", Problem::NotFound));
/// ///
/// let (progress, output, state) = parser.parse(&arena, State::new("bye, world".as_bytes()), 0).unwrap(); /// // Success case
/// assert_eq!(progress, Progress::NoProgress);
/// assert_eq!(output, None);
/// assert_eq!(state.pos().offset, 0);
///
/// let (progress, output, state) = parser.parse(&arena, State::new("hello, world".as_bytes()), 0).unwrap(); /// let (progress, output, state) = parser.parse(&arena, State::new("hello, world".as_bytes()), 0).unwrap();
/// assert_eq!(progress, Progress::MadeProgress); /// assert_eq!(progress, Progress::MadeProgress);
/// assert_eq!(output, Some(())); /// assert_eq!(output, Some(()));
/// assert_eq!(state.pos().offset, 5); /// assert_eq!(state.pos().offset, 5);
///
/// // Error case
/// let (progress, output, state) = parser.parse(&arena, State::new("bye, world".as_bytes()), 0).unwrap();
/// assert_eq!(progress, Progress::NoProgress);
/// assert_eq!(output, None);
/// assert_eq!(state.pos().offset, 0);
/// ``` /// ```
pub fn optional<'a, P, T, E>(parser: P) -> impl Parser<'a, Option<T>, E> pub fn optional<'a, P, T, E>(parser: P) -> impl Parser<'a, Option<T>, E>
where where
@ -1545,10 +1549,12 @@ macro_rules! succeed {
/// # let arena = Bump::new(); /// # let arena = Bump::new();
/// let parser = fail_when(Problem::OtherProblem, word("hello", Problem::NotFound)); /// let parser = fail_when(Problem::OtherProblem, word("hello", Problem::NotFound));
/// ///
/// // Success case
/// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("hello, world".as_bytes()), 0).unwrap_err(); /// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("hello, world".as_bytes()), 0).unwrap_err();
/// assert_eq!(progress, Progress::MadeProgress); /// assert_eq!(progress, Progress::MadeProgress);
/// assert_eq!(err, Problem::OtherProblem(Position::new(0))); /// assert_eq!(err, Problem::OtherProblem(Position::new(0)));
/// ///
/// // Error case
/// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("bye, world".as_bytes()), 0).unwrap_err(); /// let (progress, err) = Parser::<(), Problem>::parse(&parser, &arena, State::new("bye, world".as_bytes()), 0).unwrap_err();
/// assert_eq!(progress, Progress::NoProgress); /// assert_eq!(progress, Progress::NoProgress);
/// assert_eq!(err, Problem::NotFound(Position::new(0))); /// assert_eq!(err, Problem::NotFound(Position::new(0)));
@ -2252,8 +2258,6 @@ macro_rules! map_with_arena {
/// Applies the parser as many times as possible. /// Applies the parser as many times as possible.
/// This parser will only fail if the inner parser makes partial progress. /// This parser will only fail if the inner parser makes partial progress.
///
/// No examples can be written, since when this macro expands, it uses private methods.
#[macro_export] #[macro_export]
macro_rules! zero_or_more { macro_rules! zero_or_more {
($parser:expr) => { ($parser:expr) => {