Current section
Files
Jump to
Current section
Files
src/glome@core@ha_client.erl
-module(glome@core@ha_client).
-compile(no_auto_import).
-export([send_ha_rest_api_request/6]).
-spec send_ha_rest_api_request(
binary(),
integer(),
glome@core@authentication:access_token(),
gleam@http:method(),
list(binary()),
gleam@option:option(binary())
) -> {ok, binary()} | {error, glome@core@error:glome_error()}.
send_ha_rest_api_request(Host, Port, Access_token, Method, Path_elements, Body) ->
case ensure_post_or_get(Method) of
{error, _try} -> {error, _try};
{ok, Method@1} ->
Req = begin
_pipe = gleam@http:default_req(),
_pipe@1 = gleam@http:set_scheme(_pipe, http),
_pipe@2 = gleam@http:set_host(_pipe@1, Host),
_pipe@3 = gleam@http:set_port(_pipe@2, Port),
_pipe@4 = gleam@http:prepend_req_header(
_pipe@3,
<<"accept"/utf8>>,
<<"application/json"/utf8>>
),
_pipe@5 = gleam@http:prepend_req_header(
_pipe@4,
<<"Authorization"/utf8>>,
gleam@string:append(
<<"Bearer "/utf8>>,
erlang:element(2, Access_token)
)
),
_pipe@6 = gleam@http:set_method(_pipe@5, Method@1),
gleam@http:set_path(
_pipe@6,
gleam@string:concat([<<"/api"/utf8>> | Path_elements])
)
end,
Req@1 = case Body of
{some, Data} ->
gleam@http:set_req_body(Req, Data);
none ->
Req
end,
case begin
_pipe@7 = gleam@httpc:send(Req@1),
gleam@result:map_error(
_pipe@7,
fun(Error) ->
gleam@io:debug(Error),
{call_service_error, <<"Error calling service"/utf8>>}
end
)
end of
{error, _try@1} -> {error, _try@1};
{ok, Resp} ->
case erlang:element(2, Resp) of
200 ->
{ok, erlang:element(4, Resp)};
400 ->
{error, {bad_request, erlang:element(4, Resp)}};
404 ->
{error, {not_found, erlang:element(4, Resp)}}
end
end
end.
-spec ensure_post_or_get(gleam@http:method()) -> {ok, gleam@http:method()} |
{error, glome@core@error:glome_error()}.
ensure_post_or_get(Method) ->
case Method of
post ->
{ok, Method};
get ->
{ok, Method};
_@1 ->
{error, not_allowed_http_method}
end.