Current section

Files

Jump to
dream_http_client src dream_http_client@internal.erl
Raw

src/dream_http_client@internal.erl

-module(dream_http_client@internal).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/dream_http_client/internal.gleam").
-export([atomize_method/1, start_httpc_stream/1, extract_owner_pid/1, receive_next/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).
-file("src/dream_http_client/internal.gleam", 45).
?DOC(false).
-spec atomize_method(gleam@http:method()) -> gleam@erlang@atom:atom_().
atomize_method(Method) ->
case Method of
get ->
erlang:binary_to_atom(<<"get"/utf8>>);
post ->
erlang:binary_to_atom(<<"post"/utf8>>);
put ->
erlang:binary_to_atom(<<"put"/utf8>>);
delete ->
erlang:binary_to_atom(<<"delete"/utf8>>);
patch ->
erlang:binary_to_atom(<<"patch"/utf8>>);
head ->
erlang:binary_to_atom(<<"head"/utf8>>);
options ->
erlang:binary_to_atom(<<"options"/utf8>>);
trace ->
erlang:binary_to_atom(<<"trace"/utf8>>);
connect ->
erlang:binary_to_atom(<<"connect"/utf8>>);
{other, Method_string} ->
erlang:binary_to_atom(string:lowercase(Method_string))
end.
-file("src/dream_http_client/internal.gleam", 75).
?DOC(false).
-spec start_httpc_stream(gleam@http@request:request(binary())) -> gleam@dynamic:dynamic_().
start_httpc_stream(Req) ->
Url = <<<<<<(gleam@http:scheme_to_string(erlang:element(5, Req)))/binary,
"://"/utf8>>/binary,
(erlang:element(6, Req))/binary>>/binary,
(erlang:element(8, Req))/binary>>,
Method_atom = atomize_method(erlang:element(2, Req)),
Body = <<(erlang:element(4, Req))/binary>>,
Me = erlang:self(),
dream_httpc_shim:request_stream(
Method_atom,
Url,
erlang:element(3, Req),
Body,
Me
).
-file("src/dream_http_client/internal.gleam", 95).
?DOC(false).
-spec extract_owner_pid(gleam@dynamic:dynamic_()) -> gleam@dynamic:dynamic_().
extract_owner_pid(Request_result) ->
Decoded = gleam@dynamic@decode:run(
Request_result,
gleam@dynamic@decode:at(
[1],
{decoder, fun gleam@dynamic@decode:decode_dynamic/1}
)
),
case Decoded of
{ok, Id} ->
Id;
{error, _} ->
Request_result
end.
-file("src/dream_http_client/internal.gleam", 118).
?DOC(false).
-spec receive_next(gleam@dynamic:dynamic_()) -> {ok, bitstring()} | {error, nil}.
receive_next(Owner) ->
Resp = dream_httpc_shim:fetch_next(Owner),
Tag = begin
_pipe = gleam@dynamic@decode:run(
Resp,
gleam@dynamic@decode:at(
[0],
{decoder, fun gleam@dynamic@decode:decode_dynamic/1}
)
),
_pipe@1 = gleam@result:'try'(
_pipe,
fun(Dyn) -> {ok, gleam_erlang_ffi:identity(Dyn)} end
),
_pipe@2 = gleam@result:unwrap(
_pipe@1,
erlang:binary_to_atom(<<""/utf8>>)
),
erlang:atom_to_binary(_pipe@2)
end,
case Tag of
<<"chunk"/utf8>> ->
Bin = begin
_pipe@3 = gleam@dynamic@decode:run(
Resp,
gleam@dynamic@decode:at(
[1],
{decoder, fun gleam@dynamic@decode:decode_bit_array/1}
)
),
gleam@result:unwrap(_pipe@3, <<>>)
end,
{ok, Bin};
<<"finished"/utf8>> ->
{error, nil};
_ ->
{error, nil}
end.