Current section
Files
Jump to
Current section
Files
src/glitch@api@client.erl
-module(glitch@api@client).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([client_id/1, access_token/1, headers/1, get/2, post/2]).
-export_type([client/0, options/0, api_error/0]).
-opaque client() :: {client, options()}.
-type options() :: {options, binary(), binary()}.
-type api_error() :: request_error.
-spec client_id(client()) -> binary().
client_id(Client) ->
erlang:element(2, erlang:element(2, Client)).
-spec access_token(client()) -> binary().
access_token(Client) ->
erlang:element(3, erlang:element(2, Client)).
-spec headers(client()) -> list({binary(), binary()}).
headers(Client) ->
Client_id = client_id(Client),
Access_token = <<"Bearer "/utf8, (access_token(Client))/binary>>,
[{<<"Authorization"/utf8>>, Access_token},
{<<"Client-Id"/utf8>>, Client_id},
{<<"content-type"/utf8>>, <<"application/json"/utf8>>}].
-spec merge_headers(list({binary(), binary()}), list({binary(), binary()})) -> list({binary(),
binary()}).
merge_headers(Base_headers, New_headers) ->
gleam@list:fold(
New_headers,
Base_headers,
fun(Acc, Header) ->
Key = gleam@pair:first(Header),
Value = gleam@pair:second(Header),
gleam@list:key_set(Acc, Key, Value)
end
).
-spec get(client(), gleam@http@request:request(gleam@json:json())) -> {ok,
gleam@http@response:response(binary())} |
{error, gleam@dynamic:dynamic_()}.
get(Client, Request) ->
Headers = begin
_pipe = Client,
_pipe@1 = headers(_pipe),
merge_headers(_pipe@1, erlang:element(3, Request))
end,
_pipe@2 = Request,
_pipe@3 = gleam@http@request:set_method(_pipe@2, get),
_pipe@4 = glitch@extended@request_ext:set_headers(_pipe@3, Headers),
_pipe@5 = glitch@api@api_request:from_request(_pipe@4),
gleam@httpc:send(_pipe@5).
-spec post(client(), gleam@http@request:request(gleam@json:json())) -> {ok,
gleam@http@response:response(binary())} |
{error, gleam@dynamic:dynamic_()}.
post(Client, Request) ->
Headers = begin
_pipe = Client,
_pipe@1 = headers(_pipe),
merge_headers(_pipe@1, erlang:element(3, Request))
end,
_pipe@2 = erlang:setelement(3, erlang:setelement(2, Request, post), Headers),
_pipe@3 = glitch@api@api_request:from_request(_pipe@2),
gleam@httpc:send(_pipe@3).