Packages

A purely Gleam Discord library built from the ground up with stratus.

Current section

Files

Jump to
glyph src network@rest.erl
Raw

src/network@rest.erl

-module(network@rest).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([decode_application/1, request/4]).
-export_type([token_type/0]).
-type token_type() :: bearer | bot.
-spec decode_application(binary()) -> {ok, models@api:application()} |
{error, gleam@json:decode_error()}.
decode_application(Json_string) ->
User_decoder = models@decoders:user(
fun(Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8, Field@9, Field@10, Field@11, Field@12, Field@13, Field@14, Field@15) -> {user, Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8, Field@9, Field@10, Field@11, Field@12, Field@13, Field@14, Field@15} end,
gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(<<"username"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(
<<"discriminator"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"global_name"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"avatar"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(<<"bot"/utf8>>, fun gleam@dynamic:bool/1),
gleam@dynamic:optional_field(
<<"system"/utf8>>,
fun gleam@dynamic:bool/1
),
gleam@dynamic:optional_field(
<<"mfa_enabled"/utf8>>,
fun gleam@dynamic:bool/1
),
gleam@dynamic:optional_field(
<<"banner"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"accent_color"/utf8>>,
fun gleam@dynamic:int/1
),
gleam@dynamic:optional_field(
<<"locale"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"email"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(<<"flags"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:optional_field(
<<"premium_type"/utf8>>,
fun gleam@dynamic:int/1
),
gleam@dynamic:optional_field(
<<"public_flags"/utf8>>,
fun gleam@dynamic:int/1
),
gleam@dynamic:optional_field(
<<"avatar_decoration"/utf8>>,
fun gleam@dynamic:string/1
)
),
Member_decoder = models@decoders:member(
fun(Field@0, Field@1, Field@2, Field@3) -> {member, Field@0, Field@1, Field@2, Field@3} end,
gleam@dynamic:field(
<<"membership_state"/utf8>>,
fun gleam@dynamic:int/1
),
gleam@dynamic:field(<<"team_id"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(<<"user"/utf8>>, User_decoder),
gleam@dynamic:field(<<"role"/utf8>>, fun gleam@dynamic:string/1)
),
Team_decoder = models@decoders:team(
fun(Field@0, Field@1, Field@2, Field@3, Field@4) -> {team, Field@0, Field@1, Field@2, Field@3, Field@4} end,
gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:optional_field(
<<"icon"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(
<<"members"/utf8>>,
gleam@dynamic:list(Member_decoder)
),
gleam@dynamic:field(<<"name"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(
<<"owner_user_id"/utf8>>,
fun gleam@dynamic:string/1
)
),
Install_params_decoder = models@decoders:install_params(
fun(Field@0, Field@1) -> {install_params, Field@0, Field@1} end,
gleam@dynamic:field(
<<"scopes"/utf8>>,
gleam@dynamic:list(fun gleam@dynamic:string/1)
),
gleam@dynamic:field(<<"permissions"/utf8>>, fun gleam@dynamic:string/1)
),
Application_decoder = models@decoders:application(
fun(Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8, Field@9, Field@10, Field@11, Field@12, Field@13, Field@14, Field@15, Field@16, Field@17, Field@18, Field@19, Field@20, Field@21, Field@22, Field@23, Field@24, Field@25) -> {application, Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8, Field@9, Field@10, Field@11, Field@12, Field@13, Field@14, Field@15, Field@16, Field@17, Field@18, Field@19, Field@20, Field@21, Field@22, Field@23, Field@24, Field@25} end,
gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(<<"name"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:optional_field(
<<"icon"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(<<"description"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:optional_field(
<<"rpc_origins"/utf8>>,
gleam@dynamic:list(fun gleam@dynamic:string/1)
),
gleam@dynamic:field(<<"bot_public"/utf8>>, fun gleam@dynamic:bool/1),
gleam@dynamic:field(
<<"bot_require_code_grant"/utf8>>,
fun gleam@dynamic:bool/1
),
gleam@dynamic:optional_field(<<"bot"/utf8>>, User_decoder),
gleam@dynamic:optional_field(
<<"terms_of_service_url"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"privacy_policy_url"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(<<"owner"/utf8>>, User_decoder),
gleam@dynamic:optional_field(
<<"summary"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(<<"verify_key"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:optional_field(<<"team"/utf8>>, Team_decoder),
gleam@dynamic:optional_field(
<<"guild_id"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"primary_sku_id"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"slug"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"cover_image"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(<<"flags"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:optional_field(
<<"approximate_guild_count"/utf8>>,
fun gleam@dynamic:int/1
),
gleam@dynamic:optional_field(
<<"redirect_uris"/utf8>>,
gleam@dynamic:list(fun gleam@dynamic:string/1)
),
gleam@dynamic:optional_field(
<<"interactions_endpoint_url"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"role_connections_verification_url"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:optional_field(
<<"tags"/utf8>>,
gleam@dynamic:list(fun gleam@dynamic:string/1)
),
gleam@dynamic:optional_field(
<<"install_params"/utf8>>,
Install_params_decoder
),
gleam@dynamic:optional_field(
<<"custom_install_url"/utf8>>,
fun gleam@dynamic:string/1
)
),
gleam@json:decode(Json_string, Application_decoder).
-spec request(binary(), binary(), token_type(), binary()) -> {ok,
gleam@http@response:response(binary())} |
{error, gleam@hackney:error()}.
request(Ua_url, Version, Token_type, Token) ->
Token_type_str = case Token_type of
bearer ->
<<"Bearer"/utf8>>;
bot ->
<<"Bot"/utf8>>
end,
_assert_subject = gleam@http@request:to(
<<<<<<"https://discord.com/api"/utf8, "/"/utf8>>/binary, "v10"/utf8>>/binary,
"/applications/@me"/utf8>>
),
{ok, Req} = case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _assert_fail,
module => <<"network/rest"/utf8>>,
function => <<"request"/utf8>>,
line => 123})
end,
gleam@result:'try'(
begin
_pipe = Req,
_pipe@1 = gleam@http@request:prepend_header(
_pipe,
<<"Authorization"/utf8>>,
<<<<Token_type_str/binary, " "/utf8>>/binary, Token/binary>>
),
_pipe@2 = gleam@http@request:prepend_header(
_pipe@1,
<<"User-Agent"/utf8>>,
<<<<<<<<"DiscordBot("/utf8, Ua_url/binary>>/binary, ", "/utf8>>/binary,
Version/binary>>/binary,
")"/utf8>>
),
gleam@hackney:send(_pipe@2)
end,
fun(Response) ->
_pipe@3 = Response,
gleam@io:debug(_pipe@3),
_pipe@4 = erlang:element(4, Response),
_pipe@5 = decode_application(_pipe@4),
gleam@io:debug(_pipe@5),
_pipe@6 = erlang:element(2, Response),
gleeunit_ffi:should_equal(_pipe@6, 200),
_pipe@7 = Response,
_pipe@8 = gleam@http@response:get_header(
_pipe@7,
<<"content-type"/utf8>>
),
gleeunit_ffi:should_equal(
_pipe@8,
{ok, <<"application/json"/utf8>>}
),
{ok, Response}
end
).