Current section
Files
Jump to
Current section
Files
src/gleamrpc@http@client.erl
-module(gleamrpc@http@client).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([http_client/1]).
-export_type([gleam_rpc_http_client_error/0]).
-type gleam_rpc_http_client_error() :: {incorrect_uri_error, binary()} |
invalid_response_error |
{connection_error, binary(), binary()} |
{json_decode_error, gleam@json:decode_error()} |
invalid_json_error |
unable_to_read_body_error.
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 152).
-spec httpc_to_gleamrpc_error(gleam@httpc:http_error(), binary()) -> gleam_rpc_http_client_error().
httpc_to_gleamrpc_error(Error, Uri) ->
case Error of
{failed_to_connect, _, _} ->
{connection_error, Uri, <<"Httpc failed to connect"/utf8>>};
invalid_utf8_response ->
invalid_response_error
end.
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 204).
-spec router_paths(gleam@option:option(gleamrpc:router()), list(binary())) -> list(binary()).
router_paths(Router, Paths) ->
case Router of
none ->
Paths;
{some, Router@1} ->
router_paths(
erlang:element(3, Router@1),
[erlang:element(2, Router@1) | Paths]
)
end.
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 198).
-spec generate_path(gleamrpc:procedure(any(), any())) -> binary().
generate_path(Procedure) ->
<<"/api/gleamRPC/"/utf8,
(begin
_pipe = router_paths(
erlang:element(3, Procedure),
[erlang:element(2, Procedure)]
),
gleam@string:join(_pipe, <<"/"/utf8>>)
end)/binary>>.
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 174).
-spec configure_query(
gleam@http@request:request(KUX),
gleamrpc:procedure(KUZ, any()),
KUZ
) -> gleam@http@request:request(KUX).
configure_query(Req, Procedure, Params) ->
_pipe = Req,
_pipe@1 = gleam@http@request:set_method(_pipe, get),
_pipe@2 = gleam@http@request:set_path(_pipe@1, generate_path(Procedure)),
gleam@http@request:set_query(
_pipe@2,
begin
_pipe@3 = Params,
convert@http@query:encode(_pipe@3, erlang:element(5, Procedure))
end
).
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 185).
-spec configure_mutation(
gleam@http@request:request(any()),
gleamrpc:procedure(KVH, any()),
KVH
) -> gleam@http@request:request(binary()).
configure_mutation(Req, Procedure, Params) ->
_pipe = Req,
_pipe@1 = gleam@http@request:set_method(_pipe, post),
_pipe@2 = gleam@http@request:set_path(_pipe@1, generate_path(Procedure)),
gleam@http@request:set_body(
_pipe@2,
begin
_pipe@3 = convert@json:json_encode(
Params,
erlang:element(5, Procedure)
),
gleam@json:to_string(_pipe@3)
end
).
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 163).
-spec configure_request(
gleam@http@request:request(binary()),
gleamrpc:procedure(KUR, any()),
KUR
) -> gleam@http@request:request(binary()).
configure_request(Req, Procedure, Params) ->
case erlang:element(4, Procedure) of
'query' ->
configure_query(Req, Procedure, Params);
mutation ->
configure_mutation(Req, Procedure, Params)
end.
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 215).
-spec decode_result(binary(), convert:converter(KVT)) -> {ok, KVT} |
{error, gleam_rpc_http_client_error()}.
decode_result(Json_data, Result_converter) ->
_pipe = Json_data,
_pipe@1 = gleam@json:decode(
_pipe,
convert@json:json_decode(Result_converter)
),
gleam@result:map_error(
_pipe@1,
fun(Field@0) -> {json_decode_error, Field@0} end
).
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 115).
-spec call(binary()) -> fun((gleamrpc:procedure(KUI, KUJ), KUI, fun(({ok, KUJ} |
{error, gleamrpc:gleam_rpc_error(gleam_rpc_http_client_error())}) -> nil)) -> nil).
call(Uri) ->
Request = gleam@http@request:to(Uri),
case Request of
{error, _} ->
fun(_, _, Callback) ->
Callback({error, {gleam_rpc_error, {incorrect_uri_error, Uri}}})
end;
{ok, Req} ->
fun(Proc, Params, Callback@1) -> _pipe = Req,
_pipe@1 = configure_request(_pipe, Proc, Params),
_pipe@2 = gleam@httpc:send(_pipe@1),
_pipe@3 = gleam@result:map_error(
_pipe@2,
fun(Err) -> httpc_to_gleamrpc_error(Err, Uri) end
),
_pipe@4 = gleam@result:then(
_pipe@3,
fun(Res) ->
decode_result(
erlang:element(4, Res),
erlang:element(6, Proc)
)
end
),
_pipe@5 = gleam@result:map_error(
_pipe@4,
fun(Field@0) -> {gleam_rpc_error, Field@0} end
),
Callback@1(_pipe@5) end
end.
-file("/home/runner/work/gleamrpc_http_client/gleamrpc_http_client/src/gleamrpc/http/client.gleam", 35).
-spec http_client(binary()) -> gleamrpc:procedure_client(any(), any(), gleam_rpc_http_client_error()).
http_client(Uri) ->
{procedure_client, call(Uri)}.