lib/gcode/model/expr/boolean.ex

defmodule Gcode.Model.Expr.Boolean do
  defstruct b: false
  alias Gcode.Model.Expr.Boolean
  use Gcode.Result

  @moduledoc """
  Represents a boolean expression in G-code.  Can be either `true` or `false`.
  """

  @type t :: %Boolean{b: boolean}

  @doc """
  Initialise a `Boolean` from a boolean value.
  """
  @spec init(boolean) :: Result.t(t)
  def init(value) when is_boolean(value),
    do: ok(%Boolean{b: value})

  def init(value),
    do: error({:expression_error, "Expected a boolean value, instead received #{inspect(value)}"})
end