Skip to main content

lib/hex_solver/constraints/impl.ex

defmodule HexSolver.Constraints.Impl do
  @moduledoc false

  defmacro __using__(opts) do
    for = Keyword.get(opts, :for, __CALLER__.module)

    quote do
      defimpl HexSolver.Constraint, for: unquote(for) do
        def any?(constraint),
          do: unquote(__CALLER__.module).any?(constraint)

        def empty?(constraint),
          do: unquote(__CALLER__.module).empty?(constraint)

        def allows?(constraint, version),
          do: unquote(__CALLER__.module).allows?(constraint, version)

        def allows_any?(left, right),
          do: unquote(__CALLER__.module).allows_any?(left, right)

        def allows_all?(left, right),
          do: unquote(__CALLER__.module).allows_all?(left, right)

        def difference(left, right),
          do: unquote(__CALLER__.module).difference(left, right)

        def intersect(left, right),
          do: unquote(__CALLER__.module).intersect(left, right)

        def union(left, right),
          do: unquote(__CALLER__.module).union(left, right)

        def compare(left, right),
          do: unquote(__CALLER__.module).compare(left, right)
      end
    end
  end
end