-module(glitch@api@api_request). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([to_http_request/1, is_auth_request/1, is_helix_request/1, headers/1, set_headers/2, set_header/2, merge_headers/3, set_method/2, set_query/2, set_body/2, set_path/2, new_helix_request/0, new_auth_request/0]). -export_type([twitch_api_request/0]). -opaque twitch_api_request() :: {helix_api_request, gleam@http@request:request(binary())} | {auth_api_request, gleam@http@request:request(binary())}. -spec api_request_from_request(gleam@http@request:request(binary())) -> twitch_api_request(). api_request_from_request(Request) -> {helix_api_request, Request}. -spec auth_request_from_request(gleam@http@request:request(binary())) -> twitch_api_request(). auth_request_from_request(Request) -> {auth_api_request, Request}. -spec to_http_request(twitch_api_request()) -> gleam@http@request:request(binary()). to_http_request(Request) -> case Request of {helix_api_request, Http_request} -> Http_request; {auth_api_request, Http_request@1} -> Http_request@1 end. -spec is_auth_request(twitch_api_request()) -> boolean(). is_auth_request(Request) -> case Request of {helix_api_request, _} -> false; {auth_api_request, _} -> true end. -spec is_helix_request(twitch_api_request()) -> boolean(). is_helix_request(Request) -> case Request of {helix_api_request, _} -> true; {auth_api_request, _} -> false end. -spec headers(twitch_api_request()) -> list({binary(), binary()}). headers(Request) -> erlang:element(3, to_http_request(Request)). -spec set_headers(twitch_api_request(), list({binary(), binary()})) -> twitch_api_request(). set_headers(Request, Headers) -> Set_headers_internal = fun(Request@1, Headers@1) -> _pipe = Request@1, _pipe@1 = to_http_request(_pipe), glitch@extended@request_ext:set_headers(_pipe@1, Headers@1) end, case Request of {helix_api_request, _} = Http_request -> _pipe@2 = Http_request, _pipe@3 = Set_headers_internal(_pipe@2, Headers), {helix_api_request, _pipe@3}; {auth_api_request, _} = Http_request@1 -> _pipe@4 = Http_request@1, _pipe@5 = Set_headers_internal(_pipe@4, Headers), {auth_api_request, _pipe@5} end. -spec set_header(twitch_api_request(), {binary(), binary()}) -> twitch_api_request(). set_header(Request, Header) -> Set_header_internal = fun(Request@1, Header@1) -> _pipe = Request@1, _pipe@1 = to_http_request(_pipe), glitch@extended@request_ext:set_header(_pipe@1, Header@1) end, case Request of {helix_api_request, _} = Http_request -> _pipe@2 = Http_request, _pipe@3 = Set_header_internal(_pipe@2, Header), {helix_api_request, _pipe@3}; {auth_api_request, _} = Http_request@1 -> _pipe@4 = Http_request@1, _pipe@5 = Set_header_internal(_pipe@4, Header), {auth_api_request, _pipe@5} end. -spec merge_headers( twitch_api_request(), list({binary(), binary()}), list({binary(), binary()}) ) -> twitch_api_request(). merge_headers(Request, Base, Overrides) -> case Request of {helix_api_request, Http_request} -> {helix_api_request, glitch@extended@request_ext:merge_headers( Http_request, Base, Overrides )}; {auth_api_request, Http_request@1} -> {auth_api_request, glitch@extended@request_ext:merge_headers( Http_request@1, Base, Overrides )} end. -spec set_method(twitch_api_request(), gleam@http:method()) -> twitch_api_request(). set_method(Request, Method) -> case Request of {helix_api_request, Http_request} -> {helix_api_request, erlang:setelement(2, Http_request, Method)}; {auth_api_request, Http_request@1} -> {auth_api_request, erlang:setelement(2, Http_request@1, Method)} end. -spec set_query(twitch_api_request(), list({binary(), binary()})) -> twitch_api_request(). set_query(Request, Query_params) -> case Request of {helix_api_request, Http_request} -> _pipe = Http_request, _pipe@1 = gleam@http@request:set_query(_pipe, Query_params), {helix_api_request, _pipe@1}; {auth_api_request, Http_request@1} -> _pipe@2 = Http_request@1, _pipe@3 = gleam@http@request:set_query(_pipe@2, Query_params), {auth_api_request, _pipe@3} end. -spec set_body(twitch_api_request(), binary()) -> twitch_api_request(). set_body(Request, Body) -> case Request of {helix_api_request, Http_request} -> {helix_api_request, erlang:setelement(4, Http_request, Body)}; {auth_api_request, Http_request@1} -> {auth_api_request, erlang:setelement(4, Http_request@1, Body)} end. -spec set_path(twitch_api_request(), binary()) -> twitch_api_request(). set_path(Request, Path) -> case Request of {helix_api_request, Http_request} -> {helix_api_request, erlang:setelement(8, Http_request, Path)}; {auth_api_request, Http_request@1} -> {auth_api_request, erlang:setelement(8, Http_request@1, Path)} end. -spec new_helix_request() -> twitch_api_request(). new_helix_request() -> _pipe = gleam@http@request:new(), _pipe@1 = gleam@http@request:set_scheme(_pipe, https), _pipe@2 = gleam@http@request:set_host( _pipe@1, <<"api.twitch.tv/helix"/utf8>> ), api_request_from_request(_pipe@2). -spec new_auth_request() -> twitch_api_request(). new_auth_request() -> _pipe = gleam@http@request:new(), _pipe@1 = gleam@http@request:set_scheme(_pipe, https), _pipe@2 = gleam@http@request:set_host(_pipe@1, <<"id.twitch.tv"/utf8>>), auth_request_from_request(_pipe@2).