defmodule HexSolver.Assignment do @moduledoc false alias HexSolver.{Assignment, Term} defstruct term: nil, decision_level: nil, index: nil, cause: nil def intersect(%Assignment{} = left, %Assignment{} = right) do %{left | term: Term.intersect(left.term, right.term)} end def decision?(%Assignment{cause: cause}) do cause == nil end def to_string(%Assignment{term: term}) do Kernel.to_string(term) end defimpl String.Chars do defdelegate to_string(assignment), to: HexSolver.Assignment end defimpl Inspect do def inspect( %{ term: term, decision_level: decision_level, index: index, cause: cause }, _opts ) do "#Assignment" end defp maybe(_prefix, nil), do: "" defp maybe(prefix, value), do: "#{prefix}#{value}" end end