Packages
reactor
0.15.5
1.0.2
1.0.1
1.0.0
0.17.0
0.16.0
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
An asynchronous, graph-based execution engine
Current section
Files
Jump to
Current section
Files
lib/reactor/error/utils.ex
defmodule Reactor.Error.Utils do
@moduledoc false
@doc "Attempt to describe an error"
@spec describe_error(any) :: String.t()
def describe_error(error) when is_exception(error), do: Exception.message(error)
def describe_error(error) when is_binary(error) do
if String.printable?(error) do
error
else
inspect_error(error)
end
end
def describe_error(error), do: inspect_error(error)
@doc "Helper function to provide suggestions in error messages"
@spec did_you_mean?(any, Enumerable.t(any)) :: nil | String.t()
def did_you_mean?(requested, possible) do
best_match =
possible
|> Enum.map(&inspect/1)
|> Enum.max_by(
&String.jaro_distance(&1, inspect(requested)),
&>=/2,
fn ->
nil
end
)
if best_match do
"Did you mean `#{inspect(best_match)}`?"
end
end
defp inspect_error(error) do
inspected =
error
|> inspect()
|> String.trim()
if inspected =~ ~r/[\r\n\v]/ do
"""
```
#{inspected}
```
"""
else
"`#{inspected}`"
end
end
end