/// The macro takes an expression followed by `;`, followed by one or more branches separated by `,`.
/// The patterns are a comma-seperated list of either `$rule_name($binder)` or just `$binder`, each
/// This can come useful when `pest_consume` isn't powerful enough for your use-case, for example
/// if you want the ability to choose from multiple parsing functions for the same rule. This can
/// Multiple variable-length patterns match greedily: in `[rule(x).., rule(y)..]`, `y` will always
/// middle: `[rule(many1).., rule(x), other_rule(many2)..]` will always fail because `many1` will
/// The macro assumes that it is used within a consumer method, and uses `Self::$method(...)` to
/// To use it outside a method, you can pass it the parser struct as follows (the angle brackets are mandatory):
/// usable outside `pest`. It and its siblings are very ad-hoc for macro purposes and will break
/// Sibling trait to `NodeList`. The separate trait is needed so we can guide inference in macros
/// An enum such that each `NodeName::$rule` has a corresponding `Self::$rule(n: Node) -> T` function.
// It is unclear to me how this works, but the reference actually allows us to call something from Node and removing it yields an error.