Current section
Files
Jump to
Current section
Files
src/glethers@rpc@calls.erl
-module(glethers@rpc@calls).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([decode/1, encode_rpc_call/1]).
-export_type([json_rpc_response/0, json_rpc_error/0, rpc_request/0]).
-type json_rpc_response() :: {result,
integer(),
binary(),
gleam@dynamic:dynamic_()} |
{error, integer(), binary(), json_rpc_error()}.
-type json_rpc_error() :: {json_rpc_error, integer(), binary()}.
-type rpc_request() :: {rpc_request,
binary(),
list(binary()),
integer(),
binary()}.
-spec error_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok,
json_rpc_error()} |
{error, list(gleam@dynamic:decode_error())}).
error_decoder() ->
gleam@dynamic:decode2(
fun(Field@0, Field@1) -> {json_rpc_error, Field@0, Field@1} end,
gleam@dynamic:field(<<"code"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"message"/utf8>>, fun gleam@dynamic:string/1)
).
-spec response_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok,
json_rpc_response()} |
{error, list(gleam@dynamic:decode_error())}).
response_decoder() ->
gleam@dynamic:any(
[gleam@dynamic:decode3(
fun(Field@0, Field@1, Field@2) -> {result, Field@0, Field@1, Field@2} end,
gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(
<<"jsonrpc"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(
<<"result"/utf8>>,
fun gleam@dynamic:dynamic/1
)
),
gleam@dynamic:decode3(
fun(Field@0, Field@1, Field@2) -> {error, Field@0, Field@1, Field@2} end,
gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(
<<"jsonrpc"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(<<"error"/utf8>>, error_decoder())
)]
).
-spec decode(binary()) -> {ok, json_rpc_response()} |
{error, gleam@json:decode_error()}.
decode(Json_string) ->
gleam@json:decode(Json_string, response_decoder()).
-spec encode_rpc_call(rpc_request()) -> gleam@json:json().
encode_rpc_call(Json_rpc_call) ->
gleam@json:object(
[{<<"jsonrpc"/utf8>>,
gleam@json:string(erlang:element(5, Json_rpc_call))},
{<<"method"/utf8>>,
gleam@json:string(erlang:element(2, Json_rpc_call))},
{<<"params"/utf8>>,
gleam@json:array(
erlang:element(3, Json_rpc_call),
fun gleam@json:string/1
)},
{<<"id"/utf8>>, gleam@json:int(erlang:element(4, Json_rpc_call))}]
).