def handle_event(:internal, event, {:check, _name, fun, acc}, %{request: request} = data) do case fun.(request, acc) do {:next, n_request} -> set_next_step(%{data | request: n_request}, {:event, event}) {:dispatch, n_request} -> {:next_state, :dispatching, %{data | request: n_request}, [{:next_event, :internal, :dispatch}]} {:response, resp} -> {:next_state, :response, %{data | request: resp}, [{:next_event, :internal, :send_response}]} {:error, reason} -> {:next_state, :response, %{data | request: "Error, #{inspect reason}"}, [{:next_event, :internal, :send_response}]} end end