Current section

Files

Jump to
nimiq_rpc src nimiq_rpc@internal@fiber@src@fiber.erl
Raw

src/nimiq_rpc@internal@fiber@src@fiber.erl

-module(nimiq_rpc@internal@fiber@src@fiber).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/nimiq_rpc/internal/fiber/src/fiber.gleam").
-export([new/0, on_request/3, on_notification/3, bidirectional/1, client_only/1, server_only/1, call/3, notify/2, call_batch/3, close/1]).
-export_type([request_error/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 request_error(IKN) :: {returned_error,
nimiq_rpc@internal@fiber@src@fiber@message:error_data(gleam@dynamic:dynamic_())} |
{decode_error, list(gleam@dynamic@decode:decode_error())} |
{gleam_phantom, IKN}.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 15).
?DOC(false).
-spec new() -> nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder().
new() ->
{fiber_builder, maps:new(), maps:new(), none}.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 23).
?DOC(false).
-spec on_request(
nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder(),
binary(),
fun((gleam@option:option(gleam@dynamic:dynamic_())) -> {ok,
gleam@json:json()} |
{error, nimiq_rpc@internal@fiber@src@fiber@response:error()})
) -> nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder().
on_request(Builder, Method, Callback) ->
{fiber_builder,
begin
_pipe = erlang:element(2, Builder),
gleam@dict:insert(_pipe, Method, Callback)
end,
erlang:element(3, Builder),
erlang:element(4, Builder)}.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 34).
?DOC(false).
-spec on_notification(
nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder(),
binary(),
fun((gleam@option:option(gleam@dynamic:dynamic_())) -> nil)
) -> nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder().
on_notification(Builder, Method, Callback) ->
{fiber_builder,
erlang:element(2, Builder),
begin
_pipe = erlang:element(3, Builder),
gleam@dict:insert(_pipe, Method, Callback)
end,
erlang:element(4, Builder)}.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 45).
?DOC(false).
-spec bidirectional(nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder()) -> nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder().
bidirectional(Builder) ->
{fiber_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
{some, bidirectional_direction}}.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 52).
?DOC(false).
-spec client_only(nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder()) -> nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder().
client_only(Builder) ->
{fiber_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
{some, client_only_direction}}.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 59).
?DOC(false).
-spec server_only(nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder()) -> nimiq_rpc@internal@fiber@src@fiber@backend:fiber_builder().
server_only(Builder) ->
{fiber_builder,
erlang:element(2, Builder),
erlang:element(3, Builder),
{some, server_only_direction}}.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 71).
?DOC(false).
-spec call(
gleam@erlang@process:subject(nimiq_rpc@internal@fiber@src@fiber@backend:message()),
nimiq_rpc@internal@fiber@src@fiber@request:request(IKO),
integer()
) -> {ok, IKO} |
{error,
request_error({ok, gleam@dynamic:dynamic_()} |
{error,
nimiq_rpc@internal@fiber@src@fiber@message:error_data(gleam@dynamic:dynamic_())})}.
call(Fiber, Request, Timeout) ->
Id = begin
_pipe = erlang:element(5, Request),
gleam@option:unwrap(_pipe, {string_id, youid@uuid:v4_string()})
end,
Return = begin
_pipe@1 = Fiber,
_pipe@2 = gleam@erlang@process:call(
_pipe@1,
Timeout,
fun(_capture) ->
{request,
erlang:element(2, Request),
erlang:element(3, Request),
Id,
_capture}
end
),
_pipe@4 = gleam@result:map(
_pipe@2,
fun(Data) ->
_pipe@3 = gleam@dynamic@decode:run(
Data,
erlang:element(4, Request)
),
gleam@result:map_error(
_pipe@3,
fun(Field@0) -> {decode_error, Field@0} end
)
end
),
_pipe@5 = gleam@result:map_error(
_pipe@4,
fun(Field@0) -> {returned_error, Field@0} end
),
gleam@result:flatten(_pipe@5)
end,
_pipe@6 = Fiber,
gleam@erlang@process:send(_pipe@6, {remove_waiting, Id}),
Return.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 98).
?DOC(false).
-spec notify(
gleam@erlang@process:subject(nimiq_rpc@internal@fiber@src@fiber@backend:message()),
nimiq_rpc@internal@fiber@src@fiber@request:request(gleam@dynamic:dynamic_())
) -> nil.
notify(Fiber, Request) ->
_pipe = Fiber,
gleam@erlang@process:send(
_pipe,
{notification, erlang:element(2, Request), erlang:element(3, Request)}
).
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 103).
?DOC(false).
-spec call_batch(
gleam@erlang@process:subject(nimiq_rpc@internal@fiber@src@fiber@backend:message()),
list(nimiq_rpc@internal@fiber@src@fiber@request:request(any())),
integer()
) -> gleam@dict:dict(nimiq_rpc@internal@fiber@src@fiber@message:id(), {ok,
gleam@dynamic:dynamic_()} |
{error,
nimiq_rpc@internal@fiber@src@fiber@message:error_data(gleam@dynamic:dynamic_())}).
call_batch(Fiber, Requests, Timeout) ->
Ids = begin
_pipe = Requests,
_pipe@1 = gleam@list:filter_map(
_pipe,
fun(Request) -> case erlang:element(5, Request) of
none ->
{error, nil};
{some, Id} ->
{ok, Id}
end end
),
gleam@set:from_list(_pipe@1)
end,
Batch = begin
_pipe@2 = Requests,
gleam@list:map(
_pipe@2,
fun(Request@1) ->
{erlang:element(2, Request@1),
erlang:element(3, Request@1),
erlang:element(5, Request@1)}
end
)
end,
Return = begin
_pipe@3 = Fiber,
gleam@erlang@process:call(
_pipe@3,
Timeout,
fun(_capture) -> {batch, Batch, Ids, _capture} end
)
end,
_pipe@4 = Fiber,
gleam@erlang@process:send(_pipe@4, {remove_waiting_batch, Ids}),
Return.
-file("src/nimiq_rpc/internal/fiber/src/fiber.gleam", 129).
?DOC(false).
-spec close(
gleam@erlang@process:subject(nimiq_rpc@internal@fiber@src@fiber@backend:message())
) -> nil.
close(Fiber) ->
_pipe = Fiber,
gleam@erlang@process:send(_pipe, close).