Function winnow::branch::alt

source ·
pub fn alt<I: Stream, O, E: ParseError<I>, List: Alt<I, O, E>>(
    l: List
) -> impl FnMut(I) -> IResult<I, O, E>
Expand description

Pick the first successful parser

For tight control over the error, add a final case using fail. Alternatively, with a custom error type, it is possible to track all errors or return the error of the parser that went the farthest in the input data.

When the alternative cases have unique prefixes, dispatch can offer better performance.

Example

use winnow::character::{alpha1, digit1};
use winnow::branch::alt;
fn parser(input: &str) -> IResult<&str, &str> {
  alt((alpha1, digit1))(input)
};

// the first parser, alpha1, recognizes the input
assert_eq!(parser("abc"), Ok(("", "abc")));

// the first parser returns an error, so alt tries the second one
assert_eq!(parser("123456"), Ok(("", "123456")));

// both parsers failed, and with the default error type, alt will return the last error
assert_eq!(parser(" "), Err(ErrMode::Backtrack(error_position!(" ", ErrorKind::Digit))));