# Function nom::branch::alt

source · [−]

    pub fn alt<I: Clone, O, E: ParseError<I>, List: Alt<I, O, E>>(
        l: List
    ) -> impl FnMut(I) -> IResult<I, O, E>

Expand description

Tests a list of parsers one by one until one succeeds.

It takes as argument a tuple of parsers. There is a maximum of 21 parsers. If you need more, it is possible to nest them in other `alt` calls, like this: `alt(parser_a, alt(parser_b, parser_c))`

    use nom::character::complete::{alpha1, digit1};
    use nom::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(Err::Error(error_position!(" ", ErrorKind::Digit))));

With a custom error type, it is possible to have alt return the error of the parser that went the farthest in the input data