Packages
finitomata
0.26.1
0.41.0
0.40.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.1
0.30.3
0.30.2
0.30.1
0.30.0
0.29.10
0.29.9
0.29.8
0.29.7
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.1
0.28.0
0.27.1
0.27.0
0.26.4
0.26.3
0.26.2
0.26.1
0.26.0
0.25.0
0.24.4
0.24.3
0.24.2
0.24.1
0.24.0
0.23.7
0.23.6
0.23.5
0.23.4
0.23.3
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.4
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.1
0.17.0
0.16.0
0.15.1
0.15.0
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.1
0.12.0
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.0
0.3.0
0.2.0
0.1.1
0.1.0
The FSM implementation generated from PlantUML textual representation.
Current section
Files
Jump to
Current section
Files
lib/finitomata/errors.ex
defmodule Finitomata.TestTransitionError do
defexception path: nil, transition: [], missing_states: [], unknown_states: [], message: nil
@impl true
def message(%{message: nil} = exception) do
[
"The transition validation should include all possible continuations.",
if(not Enum.empty?(exception.transition),
do: " Transition: " <> inspect(exception.transition) <> "."
),
if(not Enum.empty?(exception.missing_states),
do: " Missing states: " <> inspect(exception.missing_states) <> "."
),
if(not Enum.empty?(exception.unknown_states),
do: " Unknown states: " <> inspect(exception.unknown_states) <> "."
)
]
|> Enum.reject(&is_nil/1)
|> Enum.join("\n")
end
def message(%{message: message}) do
message
end
@impl true
def blame(exception, stacktrace) do
message = message(exception) <> hint()
{%{exception | message: message}, stacktrace}
end
defp hint do
[
:yellow,
"\n 💡 If you do not want to validate anything after entering some states, use " <>
"`{:event, payload} -> :ok` clause.\n"
]
|> IO.ANSI.format()
|> to_string()
end
end
defmodule Finitomata.TestSyntaxError do
defexception code: nil, message: nil
@impl true
def message(%{message: nil, code: code}) do
code = code |> String.split("\n") |> Enum.map_join("\n", &(" " <> &1))
"The state validation withing the block must be shaped as `deeply.nested.element ~> ^value`\n Code:\n#{code}"
end
def message(%{message: message}) do
message
end
@impl true
def blame(exception, stacktrace) do
message = message(exception) <> hint()
{%{exception | message: message}, stacktrace}
end
defp hint do
[
:yellow,
"\n 💡 If you want to pattern match the result directly, pass it as the first parameter, without `do:` block\n"
]
|> IO.ANSI.format()
|> to_string()
end
end