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