Skip to main content

lib/hex_solver/registry.ex

defmodule HexSolver.Registry do
  @moduledoc """
  The registry is used by the solver to discover package versions and their dependencies.
  """

  @doc """
  Returns all versions of the given package sorted from lowest to highest or `:error` if the package
  does not exist.
  """
  @callback versions(HexSolver.repo(), HexSolver.package()) :: {:ok, [Version.t()]} | :error

  @doc """
  Returns all dependencies of the given package version or `:error` if the package or version
  does not exist.
  """
  @callback dependencies(HexSolver.repo(), HexSolver.package(), Version.t()) ::
              {:ok, [HexSolver.dependency()]} | :error

  @doc """
  Called when the solver first discovers a set of packages so that the registry can be lazily
  preloaded.
  """
  @callback prefetch([{HexSolver.repo(), HexSolver.package()}]) :: :ok
end