Current section
Files
Jump to
Current section
Files
src/glitch@api@api_response.erl
-module(glitch@api@api_response).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([of_http_response/1, get_body/1, get_headers/1, get_data/2, get_list_data/2, get_eventsub_data/2]).
-export_type([twitch_api_response/1, twitch_error_response/0, event_sub_data/1]).
-opaque twitch_api_response(RLO) :: {twitch_api_response,
gleam@http@response:response(RLO)}.
-type twitch_error_response() :: {twitch_error_response, integer(), binary()}.
-type event_sub_data(RLP) :: {event_sub_data,
RLP,
integer(),
integer(),
integer()}.
-spec of_http_response(gleam@http@response:response(binary())) -> twitch_api_response(binary()).
of_http_response(Response) ->
{twitch_api_response, Response}.
-spec get_http_response(twitch_api_response(RLS)) -> gleam@http@response:response(RLS).
get_http_response(Api_response) ->
case Api_response of
{twitch_api_response, Response} ->
Response
end.
-spec get_body(twitch_api_response(RLV)) -> RLV.
get_body(Api_response) ->
erlang:element(4, get_http_response(Api_response)).
-spec get_headers(twitch_api_response(any())) -> list({binary(), binary()}).
get_headers(Api_response) ->
Http_response = get_http_response(Api_response),
erlang:element(3, Http_response).
-spec error_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok,
twitch_error_response()} |
{error, list(gleam@dynamic:decode_error())}).
error_decoder() ->
gleam@dynamic:decode2(
fun(Field@0, Field@1) -> {twitch_error_response, Field@0, Field@1} end,
gleam@dynamic:field(<<"status"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"message"/utf8>>, fun gleam@dynamic:string/1)
).
-spec get_data(
twitch_api_response(binary()),
fun((gleam@dynamic:dynamic_()) -> {ok, RMC} |
{error, list(gleam@dynamic:decode_error())})
) -> {ok, RMC} | {error, glitch@error:twitch_error()}.
get_data(Api_response, Data_decoder) ->
Body = get_body(Api_response),
Error = gleam@json:decode(Body, error_decoder()),
case Error of
{ok, {twitch_error_response, Status, Message}} ->
{error, {response_error, Status, Message}};
_ ->
_pipe = Body,
_pipe@1 = gleam@json:decode(
_pipe,
gleam@dynamic:any(
[Data_decoder,
gleam@dynamic:field(<<"data"/utf8>>, Data_decoder)]
)
),
gleam@result:map_error(
_pipe@1,
fun(Field@0) -> {response_decode_error, Field@0} end
)
end.
-spec get_list_data(
twitch_api_response(binary()),
fun((gleam@dynamic:dynamic_()) -> {ok, RMH} |
{error, list(gleam@dynamic:decode_error())})
) -> {ok, list(RMH)} | {error, glitch@error:twitch_error()}.
get_list_data(Api_response, Data_decoder) ->
Body = get_body(Api_response),
Error = gleam@json:decode(Body, error_decoder()),
case Error of
{ok, {twitch_error_response, Status, Message}} ->
{error, {response_error, Status, Message}};
_ ->
_pipe = Body,
_pipe@1 = gleam@json:decode(
_pipe,
gleam@dynamic:any(
[gleam@dynamic:field(
<<"data"/utf8>>,
gleam@dynamic:list(Data_decoder)
),
gleam@dynamic:list(Data_decoder)]
)
),
gleam@result:map_error(
_pipe@1,
fun(Field@0) -> {response_decode_error, Field@0} end
)
end.
-spec eventsub_data_decoder(
fun((gleam@dynamic:dynamic_()) -> {ok, RMM} |
{error, list(gleam@dynamic:decode_error())})
) -> fun((gleam@dynamic:dynamic_()) -> {ok, event_sub_data(list(RMM))} |
{error, list(gleam@dynamic:decode_error())}).
eventsub_data_decoder(Data_decoder) ->
gleam@dynamic:decode4(
fun(Field@0, Field@1, Field@2, Field@3) -> {event_sub_data, Field@0, Field@1, Field@2, Field@3} end,
gleam@dynamic:field(<<"data"/utf8>>, gleam@dynamic:list(Data_decoder)),
gleam@dynamic:field(<<"total"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"total_cost"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"max_total_cost"/utf8>>, fun gleam@dynamic:int/1)
).
-spec get_eventsub_data(
twitch_api_response(binary()),
fun((gleam@dynamic:dynamic_()) -> {ok, RMS} |
{error, list(gleam@dynamic:decode_error())})
) -> {ok, event_sub_data(list(RMS))} | {error, glitch@error:twitch_error()}.
get_eventsub_data(Api_response, Data_decoder) ->
Body = get_body(Api_response),
Error = gleam@json:decode(Body, error_decoder()),
case Error of
{ok, {twitch_error_response, Status, Message}} ->
{error, {response_error, Status, Message}};
_ ->
_pipe = Body,
_pipe@1 = gleam@json:decode(
_pipe,
eventsub_data_decoder(Data_decoder)
),
gleam@result:map_error(
_pipe@1,
fun(Field@0) -> {response_decode_error, Field@0} end
)
end.