///|
/// A single node in a cucumber expression AST.
pub(all) enum Node {
/// Literal text.
TextNode(String)
/// A parameter reference like `{int}` or `{string}`.
ParameterNode(String)
/// Optional text like `(blind)`. Contains child nodes.
OptionalNode(Array[Node])
/// Alternation like `cat/dog`. Each alternative is an array of nodes.
AlternationNode(Array[Array[Node]])
/// Top-level expression node containing all children.
ExpressionNode(Array[Node])
} derive(Debug, Eq, ToJson, FromJson)
///|
pub extend Node with ToJson::{to_json}
///|
pub extend Node with @json.FromJson::{from_json}
///|
#deprecated
pub extend Node with Eq::{not_equal, equal}
///|
#deprecated
pub extend Node with @debug.Debug::{to_repr}