Current section
Files
Jump to
Current section
Files
src/nimiq_rpc@internal@fiber@src@fiber@message.erl
-module(nimiq_rpc@internal@fiber@src@fiber@message).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/nimiq_rpc/internal/fiber/src/fiber/message.gleam").
-export([decode/1, from_json/1, encode/1, to_json/1]).
-export_type([id/0, error_data/1, request/1, response/1, message/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type id() :: {int_id, integer()} | {string_id, binary()}.
-type error_data(HKT) :: {error_data,
gleam@option:option(HKT),
integer(),
binary()} |
{error_string, binary()}.
-type request(HKU) :: {request, gleam@option:option(HKU), binary(), id()} |
{notification, gleam@option:option(HKU), binary()}.
-type response(HKV) :: {success_response, HKV, id()} |
{error_response, error_data(HKV), id()}.
-type message(HKW) :: {request_message, request(HKW)} |
{response_message, response(HKW)} |
{error_message, error_data(HKW)} |
{batch_request_message, list(request(HKW))} |
{batch_response_message, list(response(HKW))}.
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 46).
?DOC(false).
-spec error_data_decoder() -> gleam@dynamic@decode:decoder(error_data(gleam@dynamic:dynamic_())).
error_data_decoder() ->
_pipe@1 = gleam@dynamic@decode:one_of(
begin
_pipe = {decoder, fun gleam@dynamic@decode:decode_string/1},
gleam@dynamic@decode:map(
_pipe,
fun(Field@0) -> {error_string, Field@0} end
)
end,
[begin
gleam@dynamic@decode:optional_field(
<<"data"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_dynamic/1}
),
fun(Data) ->
gleam@dynamic@decode:field(
<<"code"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Code) ->
gleam@dynamic@decode:field(
<<"message"/utf8>>,
{decoder,
fun gleam@dynamic@decode:decode_string/1},
fun(Message) ->
gleam@dynamic@decode:success(
{error_data, Data, Code, Message}
)
end
)
end
)
end
)
end]
),
gleam@dynamic@decode:collapse_errors(_pipe@1, <<"ErrorData"/utf8>>).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 89).
?DOC(false).
-spec response_decoder() -> gleam@dynamic@decode:decoder(response(gleam@dynamic:dynamic_())).
response_decoder() ->
_pipe = gleam@dynamic@decode:one_of(
begin
gleam@dynamic@decode:field(
<<"result"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_dynamic/1},
fun(Result) ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
id_decoder(),
fun(Id) ->
gleam@dynamic@decode:success(
{success_response, Result, Id}
)
end
)
end
)
end,
[begin
gleam@dynamic@decode:field(
<<"error"/utf8>>,
error_data_decoder(),
fun(Error) ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
id_decoder(),
fun(Id@1) ->
gleam@dynamic@decode:success(
{error_response, Error, Id@1}
)
end
)
end
)
end]
),
gleam@dynamic@decode:collapse_errors(_pipe, <<"Response"/utf8>>).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 62).
?DOC(false).
-spec request_decoder() -> gleam@dynamic@decode:decoder(request(gleam@dynamic:dynamic_())).
request_decoder() ->
_pipe = gleam@dynamic@decode:one_of(
begin
gleam@dynamic@decode:optional_field(
<<"params"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_dynamic/1}
),
fun(Params) ->
gleam@dynamic@decode:field(
<<"method"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Method) ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
id_decoder(),
fun(Id) ->
gleam@dynamic@decode:success(
{request, Params, Method, Id}
)
end
)
end
)
end
)
end,
[begin
gleam@dynamic@decode:optional_field(
<<"params"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_dynamic/1}
),
fun(Params@1) ->
gleam@dynamic@decode:field(
<<"method"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Method@1) ->
gleam@dynamic@decode:success(
{notification, Params@1, Method@1}
)
end
)
end
)
end]
),
gleam@dynamic@decode:collapse_errors(_pipe, <<"Request"/utf8>>).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 107).
?DOC(false).
-spec error_decoder() -> gleam@dynamic@decode:decoder(error_data(gleam@dynamic:dynamic_())).
error_decoder() ->
gleam@dynamic@decode:field(
<<"error"/utf8>>,
error_data_decoder(),
fun(Error) -> gleam@dynamic@decode:success(Error) end
).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 112).
?DOC(false).
-spec message_decoder() -> gleam@dynamic@decode:decoder(message(gleam@dynamic:dynamic_())).
message_decoder() ->
_pipe@5 = gleam@dynamic@decode:one_of(
begin
_pipe = response_decoder(),
gleam@dynamic@decode:map(
_pipe,
fun(Field@0) -> {response_message, Field@0} end
)
end,
[begin
_pipe@1 = request_decoder(),
gleam@dynamic@decode:map(
_pipe@1,
fun(Field@0) -> {request_message, Field@0} end
)
end,
begin
_pipe@2 = error_decoder(),
gleam@dynamic@decode:map(
_pipe@2,
fun(Field@0) -> {error_message, Field@0} end
)
end,
begin
_pipe@3 = gleam@dynamic@decode:list(request_decoder()),
gleam@dynamic@decode:map(
_pipe@3,
fun(Field@0) -> {batch_request_message, Field@0} end
)
end,
begin
_pipe@4 = gleam@dynamic@decode:list(response_decoder()),
gleam@dynamic@decode:map(
_pipe@4,
fun(Field@0) -> {batch_response_message, Field@0} end
)
end]
),
gleam@dynamic@decode:collapse_errors(_pipe@5, <<"Message"/utf8>>).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 122).
?DOC(false).
-spec decode(binary()) -> {ok, message(gleam@dynamic:dynamic_())} |
{error, gleam@json:decode_error()}.
decode(Text) ->
gleam@json:parse(Text, message_decoder()).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 39).
?DOC(false).
-spec id_decoder() -> gleam@dynamic@decode:decoder(id()).
id_decoder() ->
_pipe@2 = gleam@dynamic@decode:one_of(
begin
_pipe = {decoder, fun gleam@dynamic@decode:decode_int/1},
gleam@dynamic@decode:map(
_pipe,
fun(Field@0) -> {int_id, Field@0} end
)
end,
[begin
_pipe@1 = {decoder, fun gleam@dynamic@decode:decode_string/1},
gleam@dynamic@decode:map(
_pipe@1,
fun(Field@0) -> {string_id, Field@0} end
)
end]
),
gleam@dynamic@decode:collapse_errors(_pipe@2, <<"Id"/utf8>>).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 126).
?DOC(false).
-spec from_json(binary()) -> {ok, message(gleam@dynamic:dynamic_())} |
{error, gleam@json:decode_error()}.
from_json(Text) ->
decode(Text).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 130).
?DOC(false).
-spec encode_id(id()) -> gleam@json:json().
encode_id(Id) ->
case Id of
{int_id, I} ->
gleam@json:int(I);
{string_id, S} ->
gleam@json:string(S)
end.
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 137).
?DOC(false).
-spec encode_error_data(error_data(gleam@json:json())) -> gleam@json:json().
encode_error_data(Error) ->
case Error of
{error_data, Data, Code, Message} ->
gleam@json:object(
gleam@result:values(
[begin
_pipe = {<<"code"/utf8>>, gleam@json:int(Code)},
{ok, _pipe}
end,
begin
_pipe@1 = {<<"message"/utf8>>,
gleam@json:string(Message)},
{ok, _pipe@1}
end,
begin
_pipe@2 = Data,
_pipe@3 = gleam@option:map(
_pipe@2,
fun(_capture) ->
gleam@pair:new(<<"data"/utf8>>, _capture)
end
),
gleam@option:to_result(_pipe@3, nil)
end]
)
);
{error_string, S} ->
gleam@json:string(S)
end.
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 153).
?DOC(false).
-spec encode_request(request(gleam@json:json())) -> gleam@json:json().
encode_request(Request) ->
case Request of
{notification, Params, Method} ->
gleam@json:object(
gleam@result:values(
[begin
_pipe = {<<"jsonrpc"/utf8>>,
gleam@json:string(<<"2.0"/utf8>>)},
{ok, _pipe}
end,
begin
_pipe@1 = {<<"method"/utf8>>,
gleam@json:string(Method)},
{ok, _pipe@1}
end,
begin
_pipe@2 = gleam@option:map(
Params,
fun(_capture) ->
gleam@pair:new(<<"params"/utf8>>, _capture)
end
),
gleam@option:to_result(_pipe@2, nil)
end]
)
);
{request, Params@1, Method@1, Id} ->
gleam@json:object(
gleam@result:values(
[begin
_pipe@3 = {<<"jsonrpc"/utf8>>,
gleam@json:string(<<"2.0"/utf8>>)},
{ok, _pipe@3}
end,
begin
_pipe@4 = {<<"id"/utf8>>, encode_id(Id)},
{ok, _pipe@4}
end,
begin
_pipe@5 = {<<"method"/utf8>>,
gleam@json:string(Method@1)},
{ok, _pipe@5}
end,
begin
_pipe@6 = Params@1,
_pipe@7 = gleam@option:map(
_pipe@6,
fun(_capture@1) ->
gleam@pair:new(
<<"params"/utf8>>,
_capture@1
)
end
),
_pipe@8 = gleam@option:unwrap(
_pipe@7,
{<<"params"/utf8>>,
gleam@json:preprocessed_array([])}
),
{ok, _pipe@8}
end]
)
)
end.
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 178).
?DOC(false).
-spec encode_response(response(gleam@json:json())) -> gleam@json:json().
encode_response(Response) ->
case Response of
{error_response, Error, Id} ->
gleam@json:object(
[{<<"jsonrpc"/utf8>>, gleam@json:string(<<"2.0"/utf8>>)},
{<<"id"/utf8>>, encode_id(Id)},
{<<"error"/utf8>>, encode_error_data(Error)}]
);
{success_response, Result, Id@1} ->
gleam@json:object(
[{<<"jsonrpc"/utf8>>, gleam@json:string(<<"2.0"/utf8>>)},
{<<"id"/utf8>>, encode_id(Id@1)},
{<<"result"/utf8>>, Result}]
)
end.
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 195).
?DOC(false).
-spec encode_error(error_data(gleam@json:json())) -> gleam@json:json().
encode_error(Error) ->
gleam@json:object(
[{<<"jsonrpc"/utf8>>, gleam@json:string(<<"2.0"/utf8>>)},
{<<"id"/utf8>>, gleam@json:null()},
{<<"error"/utf8>>, encode_error_data(Error)}]
).
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 203).
?DOC(false).
-spec encode(message(gleam@json:json())) -> gleam@json:json().
encode(Message) ->
case Message of
{batch_request_message, Batch} ->
_pipe = Batch,
gleam@json:array(_pipe, fun encode_request/1);
{batch_response_message, Batch@1} ->
_pipe@1 = Batch@1,
gleam@json:array(_pipe@1, fun encode_response/1);
{error_message, Error} ->
encode_error(Error);
{request_message, Request} ->
encode_request(Request);
{response_message, Response} ->
encode_response(Response)
end.
-file("src/nimiq_rpc/internal/fiber/src/fiber/message.gleam", 213).
?DOC(false).
-spec to_json(message(gleam@json:json())) -> gleam@json:json().
to_json(Message) ->
encode(Message).