-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>>, <<<>/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 ).