fn has_all<'a, E>(input: &'a str) -> IResult<&'a str, (&'a str, &'a str), E>
where
    E: NomParseError<&'a str>,
{
    let (rest, (has, _, all)) = alt((
        tuple((tag("has"), whitespace1, tag("all"))),
        tuple((tag("HAS"), whitespace1, tag("ALL"))),
    ))(input)?;
    Ok((rest, (has, all)))
}
/// Parses the `has all` operator in the two flavors we support: all characters uppercase or all
/// of them lowercase.
Parses the `has all` operator in the two flavors we support: all characters uppercase or all
of them lowercase.
Parses the ` has all ` operator in the two flavors we support : all characters uppercase or all of them lowercase .
fn has_all<'a, E>(input: &'a str) -> IResult<&'a str, (&'a str, &'a str), E>
where
    E: NomParseError<&'a str>,
{
    let (rest, (has, _, all)) = alt((
        tuple((tag("has"), whitespace1, tag("all"))),
        tuple((tag("HAS"), whitespace1, tag("ALL"))),
    ))(input)?;
    Ok((rest, (has, all)))
}
fn has_all < ' a , E > ( input : & ' a str ) -> IResult < & ' a str , ( & ' a str , & ' a str ) , E > where E : NomParseError < & ' a str > , { let ( rest , ( has , _ , all ) ) = alt ( ( tuple ( ( tag ( " " ) , whitespace1 , tag ( " " ) ) ) , tuple ( ( tag ( " " ) , whitespace1 , tag ( " " ) ) ) , ) ) ( input ) ? ; Ok ( ( rest , ( has , all ) ) ) }
Parses the `has all` operator in the two flavors we support: all characters uppercase or all
of them lowercase.
Parses the ` has all ` operator in the two flavors we support : all characters uppercase or all of them lowercase .
input
&'a str
input
&'a str