-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))}] ).