defmodule Rewrite.Error do @moduledoc """ An exception for when a function can not handle a source. """ alias Rewrite.Error alias Rewrite.Source @type reason :: :nosource | :nopath | :overwrites | :invalid_sources @type t :: %Error{ reason: reason, path: Path.t() | nil, missing_paths: [Source.t()] | nil, duplicated_paths: [Source.t()] | nil } @enforce_keys [:reason] defexception [:reason, :path, :missing_paths, :duplicated_paths] @impl true def exception(value) do struct!(Error, value) end @impl true def message(%Error{reason: :nopath}) do "no path found" end def message(%Error{reason: :nosource, path: path}) do "no source found for #{inspect(path)}" end def message(%Error{reason: :overwrites, path: path}) do "overwrites #{inspect(path)}" end def message(%Error{reason: :invalid_sources}) do "invalid sources" end end