defmodule HexSolver.PackageRange do
@moduledoc false
alias HexSolver.PackageRange
alias HexSolver.Constraints.Range
defstruct repo: nil,
name: nil,
constraint: nil
def to_string(%PackageRange{name: "$root"}), do: "your app"
def to_string(%PackageRange{name: "$lock"}), do: "the lock"
def to_string(%PackageRange{repo: nil, name: name, constraint: constraint}),
do: "#{name}#{constraint(constraint)}"
def to_string(%PackageRange{repo: repo, name: name, constraint: constraint}),
do: "#{repo}/#{name}#{constraint(constraint)}"
defp constraint(%Range{min: nil, max: nil}), do: ""
defp constraint(constraint), do: " #{constraint}"
defimpl String.Chars do
defdelegate to_string(package_range), to: HexSolver.PackageRange
end
defimpl Inspect do
def inspect(%{repo: nil, name: name, constraint: constraint}, _opts),
do: "#PackageRange<#{name} #{constraint}>"
def inspect(%{repo: repo, name: name, constraint: constraint}, _opts),
do: "#PackageRange<#{repo}/#{name} #{constraint}>"
end
end