Current section
Files
Jump to
Current section
Files
lib/boltx/bolt_protocol/message/run_message.ex
defmodule Bolty.BoltProtocol.Message.RunMessage do
@moduledoc false
alias Bolty.BoltProtocol.MessageEncoder
@signature 0x10
def encode(bolt_version, query, parameters, extra_parameters)
when is_float(bolt_version) and bolt_version >= 3.0 do
message = [query, parameters, get_extra_parameters(extra_parameters)]
MessageEncoder.encode(@signature, message)
end
def encode(bolt_version, query, parameters, _extra_parameters)
when is_float(bolt_version) and bolt_version <= 2.0 do
message = [query, parameters]
MessageEncoder.encode(@signature, message)
end
def encode(_, _, _, _) do
{:error,
Bolty.Error.wrap(__MODULE__, %{
code: :unsupported_message_version,
message: "RUN message version not supported"
})}
end
def prepare_messages(bolt_version, messages) do
case hd(messages) do
{:success, response} ->
case bolt_version <= 2.0 do
true ->
{:ok,
Map.merge(
%{"t_first" => response["result_available_after"]},
Map.delete(response, "result_available_after")
)}
false ->
{:ok, response}
end
{:failure, response} ->
{:error,
Bolty.Error.wrap(__MODULE__, %{code: response["code"], message: response["message"]})}
end
end
defp get_extra_parameters(extra_parameters) do
%{
bookmarks: Map.get(extra_parameters, :bookmarks, []),
mode: Map.get(extra_parameters, :mode, "w"),
db: Map.get(extra_parameters, :db, nil),
tx_metadata: Map.get(extra_parameters, :tx_metadata, nil)
}
end
end