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([from_json/2, get_data/1, get_data_from_response/1]).
-export_type([twitch_api_response/1]).
-type twitch_api_response(OVH) :: {twitch_api_response, list(OVH)}.
-spec decoder(
fun((gleam@dynamic:dynamic_()) -> {ok, OVI} |
{error, list(gleam@dynamic:decode_error())})
) -> fun((gleam@dynamic:dynamic_()) -> {ok, twitch_api_response(OVI)} |
{error, list(gleam@dynamic:decode_error())}).
decoder(Data_decoder) ->
gleam@dynamic:decode1(
fun(Field@0) -> {twitch_api_response, Field@0} end,
gleam@dynamic:field(<<"data"/utf8>>, gleam@dynamic:list(Data_decoder))
).
-spec from_json(
binary(),
fun((gleam@dynamic:dynamic_()) -> {ok, OVM} |
{error, list(gleam@dynamic:decode_error())})
) -> {ok, twitch_api_response(OVM)} | {error, gleam@json:decode_error()}.
from_json(Json_string, Data_decoder) ->
gleam@io:println(Json_string),
gleam@json:decode(Json_string, decoder(Data_decoder)).
-spec get_data(twitch_api_response(OVP)) -> list(OVP).
get_data(Api_response) ->
erlang:element(2, Api_response).
-spec get_data_from_response(
gleam@http@response:response(twitch_api_response(OVS))
) -> {ok, gleam@http@response:response(list(OVS))} | {error, any()}.
get_data_from_response(Response) ->
_pipe = Response,
gleam@http@response:try_map(
_pipe,
glitch@extended@function_ext:compose(
fun get_data/1,
fun(Field@0) -> {ok, Field@0} end
)
).