Function any_of

Source
pub fn any_of<V>(tokens: V) -> Token
where V: Into<Vec<Token>>,
Expand description

Matches one or more of a set of tokens, in any order but without repetition.

ยงExamples

use initiative_core::command::prelude::*;

let token = any_of([keyword("badger"), keyword("mushroom"), keyword("snake")]);

assert_eq!(
    vec![
        // "Ungreedy" version consuming only one token,
        FuzzyMatch::Overflow(
            TokenMatch::new(&token, vec![
                TokenMatch::from(&keyword("mushroom")),
            ]),
            " snake badger badger".into(),
        ),

        // two tokens,
        FuzzyMatch::Overflow(
            TokenMatch::new(&token, vec![
                TokenMatch::from(&keyword("mushroom")),
                TokenMatch::from(&keyword("snake")),
            ]),
            " badger badger".into(),
        ),

        // and all three tokens. The final word is repeated and so does not match.
        FuzzyMatch::Overflow(
            TokenMatch::new(&token, vec![
                TokenMatch::from(&keyword("mushroom")),
                TokenMatch::from(&keyword("snake")),
                TokenMatch::from(&keyword("badger")),
            ]),
            " badger".into(),
        ),
    ],
    token
        .match_input("mushroom snake badger badger", &app_meta)
        .collect::<Vec<_>>()
        .await,
);