defmodule DBF.DatabaseError do
defexception [:reason, :further_info]
@type t() :: %__MODULE__{reason: atom}
@impl true
@spec message(DBF.DatabaseError.t()) :: String.t()
def message(%__MODULE__{reason: reason}) do
format_reason(reason)
end
@doc false
@spec new(atom()) :: DBF.DatabaseError.t()
@spec new(atom(), String.t()) :: DBF.DatabaseError.t()
def new(reason, further_info \\ "") do
%__MODULE__{reason: reason, further_info: further_info}
end
defp format_reason(:missing_memo_file), do: "Missing memo file"
defp format_reason(:invalid_options), do: "Invalid options provided"
defp format_reason(:unhandled_field_type), do: "We encountered a field type that we don't know how to handle"
defp format_reason(:unsupported_version), do: "Database version not supported"
defp format_reason(:enoent), do: "File not found"
defp format_reason(_), do: "UNKNOWN ERROR"
end