Current section
Files
Jump to
Current section
Files
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/2, extract_owner_pid/1, receive_next/2, start_stream_messages/6, cancel_stream_internal/1, receive_stream_message/1, decode_stream_message_for_selector/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", 49).
?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", 80).
?DOC(false).
-spec start_httpc_stream(gleam@http@request:request(binary()), integer()) -> gleam@dynamic:dynamic_().
start_httpc_stream(Req, Timeout_ms) ->
Port_string = case erlang:element(7, Req) of
{some, P} ->
<<":"/utf8, (erlang:integer_to_binary(P))/binary>>;
none ->
<<""/utf8>>
end,
Url = <<<<<<<<(gleam@http:scheme_to_string(erlang:element(5, Req)))/binary,
"://"/utf8>>/binary,
(erlang:element(6, Req))/binary>>/binary,
Port_string/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,
Timeout_ms
).
-file("src/dream_http_client/internal.gleam", 111).
?DOC(false).
-spec extract_owner_pid(gleam@dynamic:dynamic_()) -> gleam@dynamic:dynamic_().
extract_owner_pid(Request_result) ->
case gleam@dynamic@decode:run(
Request_result,
gleam@dynamic@decode:at(
[1],
{decoder, fun gleam@dynamic@decode:decode_dynamic/1}
)
) of
{ok, Pid} ->
Pid;
{error, Decode_errors} ->
Error_details = gleam@string:inspect(Decode_errors),
gleam_stdlib:println_error(
<<"WARNING: Failed to extract owner PID - this should not happen. Error: "/utf8,
Error_details/binary>>
),
Request_result
end.
-file("src/dream_http_client/internal.gleam", 172).
?DOC(false).
-spec convert_to_atom(gleam@dynamic:dynamic_()) -> {ok,
gleam@erlang@atom:atom_()} |
{error, any()}.
convert_to_atom(Dyn) ->
{ok, gleam_erlang_ffi:identity(Dyn)}.
-file("src/dream_http_client/internal.gleam", 146).
?DOC(false).
-spec receive_next(gleam@dynamic:dynamic_(), integer()) -> {ok,
gleam@option:option(bitstring())} |
{error, binary()}.
receive_next(Owner, Timeout_ms) ->
Resp = dream_httpc_shim:fetch_next(Owner, Timeout_ms),
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 convert_to_atom/1),
_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, {some, Bin}};
<<"finished"/utf8>> ->
{ok, none};
<<"error"/utf8>> ->
Reason = begin
_pipe@4 = gleam@dynamic@decode:run(
Resp,
gleam@dynamic@decode:at(
[1],
{decoder, fun gleam@dynamic@decode:decode_string/1}
)
),
gleam@result:unwrap(_pipe@4, <<"Unknown stream error"/utf8>>)
end,
{error, Reason};
_ ->
{error, <<"Unexpected stream message tag: "/utf8, Tag/binary>>}
end.
-file("src/dream_http_client/internal.gleam", 198).
?DOC(false).
-spec start_stream_messages(
gleam@erlang@atom:atom_(),
binary(),
list({binary(), binary()}),
bitstring(),
gleam@erlang@process:pid_(),
integer()
) -> gleam@dynamic:dynamic_().
start_stream_messages(Method, Url, Headers, Body, Receiver, Timeout_ms) ->
dream_httpc_shim:request_stream_messages(
Method,
Url,
Headers,
Body,
Receiver,
Timeout_ms
).
-file("src/dream_http_client/internal.gleam", 215).
?DOC(false).
-spec cancel_stream_internal(gleam@dynamic:dynamic_()) -> nil.
cancel_stream_internal(Request_id) ->
dream_httpc_shim:cancel_stream(Request_id).
-file("src/dream_http_client/internal.gleam", 230).
?DOC(false).
-spec receive_stream_message(integer()) -> gleam@dynamic:dynamic_().
receive_stream_message(Timeout_ms) ->
dream_httpc_shim:receive_stream_message(Timeout_ms).
-file("src/dream_http_client/internal.gleam", 245).
?DOC(false).
-spec decode_stream_message_for_selector(gleam@dynamic:dynamic_()) -> gleam@dynamic:dynamic_().
decode_stream_message_for_selector(Message) ->
dream_httpc_shim:decode_stream_message_for_selector(Message).