Current section
Files
Jump to
Current section
Files
lib/jsonrpc2/client.ex
defmodule JSONRPC2.Client do
@moduledoc """
Documentation for `JSONRPC2.Client`.
Example:
alias JSONRPC2.Spec.Result
alias JSONRPC2.Spec.Error
[%Result{}, %Error{}] =
method
|> JSONRPC2.Client.call(params, id)
|> JSONRPC2.Client.call(method, params, id)
|> JSONRPC2.Client.notify(method, params)
|> JSONRPC2.Client.send(
"http://127.0.0.1:4000",
headers: [%{"X-Token" => token()}],
recv_timeout: 3000,
timeout: 3000
)
"""
alias JSONRPC2.Telemetry
alias JSONRPC2.Spec.Batch
import Kernel, except: [send: 2]
defdelegate call(method, params, id), to: Batch
defdelegate call(batch, method, params, id), to: Batch
defdelegate notify(method, params), to: Batch
defdelegate notify(batch, method, params), to: Batch
def send(%Batch{calls: calls, notifies: notifies}, url, opts \\ []) do
calls_n_notifies = Map.values(calls) ++ notifies
meta =
%{
batch: calls_n_notifies,
url: url,
opts: opts
}
Telemetry.span(:client, meta, fn ->
res = adapter().execute(url, calls_n_notifies, opts)
{res, Map.merge(meta, %{res: res})}
end)
end
def adapter do
Application.get_env(
:jsonrpc2_client,
:adapter,
JSONRPC2.Client.Adapters.Default
)
end
end