///|
/// 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(Show, Eq, ToJson, FromJson)