lib/gcode/model/expr/helpers.ex

defmodule Gcode.Model.Expr.Helpers do
  alias Gcode.Model.Expr

  @moduledoc """
  Helpers for working with expressions.
  """

  @doc """
  A guard which ensures that `value` is an expression struct.
  """
  @spec is_expression(any) :: Macro.t()
  defguard is_expression(value)
           when is_struct(value, Expr.Binary) or is_struct(value, Expr.Boolean) or
                  is_struct(value, Expr.Constant) or is_struct(value, Expr.Float) or
                  is_struct(value, Expr.Integer) or is_struct(value, Expr.List) or
                  is_struct(value, Expr.String) or is_struct(value, Expr.Unary)
end