-module(glitch@api@user). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([to_json/1, from_json/1, query_params_from_get_users_request/1, get_users/2]). -export_type([user/0, get_users_request/0]). -type user() :: {user, binary(), binary(), binary(), binary(), binary(), binary(), gleam@uri:uri(), gleam@uri:uri(), integer(), gleam@option:option(binary()), binary()}. -type get_users_request() :: {get_users_request, gleam@option:option(list(binary())), gleam@option:option(list(binary()))}. -spec decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, user()} | {error, list(gleam@dynamic:decode_error())}). decoder() -> glitch@extended@dynamic_ext:decode11( fun(Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8, Field@9, Field@10) -> {user, Field@0, Field@1, Field@2, Field@3, Field@4, Field@5, Field@6, Field@7, Field@8, Field@9, Field@10} end, gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"login"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"display_name"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field(<<"type"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field( <<"broadcaster_type"/utf8>>, fun gleam@dynamic:string/1 ), gleam@dynamic:field(<<"description"/utf8>>, fun gleam@dynamic:string/1), gleam@dynamic:field( <<"profile_image_url"/utf8>>, fun glitch@extended@dynamic_ext:uri/1 ), gleam@dynamic:field( <<"offline_image_url"/utf8>>, fun glitch@extended@dynamic_ext:uri/1 ), gleam@dynamic:field(<<"view_count"/utf8>>, fun gleam@dynamic:int/1), gleam@dynamic:optional_field( <<"email"/utf8>>, fun gleam@dynamic:string/1 ), gleam@dynamic:field(<<"created_at"/utf8>>, fun gleam@dynamic:string/1) ). -spec to_json(user()) -> gleam@json:json(). to_json(User) -> gleam@json:object( [{<<"id"/utf8>>, gleam@json:string(erlang:element(2, User))}, {<<"login"/utf8>>, gleam@json:string(erlang:element(3, User))}, {<<"display_name"/utf8>>, gleam@json:string(erlang:element(4, User))}, {<<"type"/utf8>>, gleam@json:string(erlang:element(5, User))}, {<<"broadcaster_type"/utf8>>, gleam@json:string(erlang:element(6, User))}, {<<"description"/utf8>>, gleam@json:string(erlang:element(7, User))}, {<<"profile_image_url"/utf8>>, glitch@extended@json_ext:uri(erlang:element(8, User))}, {<<"offline_image_url"/utf8>>, glitch@extended@json_ext:uri(erlang:element(9, User))}, {<<"view_count"/utf8>>, gleam@json:int(erlang:element(10, User))}, {<<"email"/utf8>>, glitch@extended@json_ext:option( erlang:element(11, User), fun gleam@json:string/1 )}, {<<"created_at"/utf8>>, gleam@json:string(erlang:element(12, User))}] ). -spec from_json(binary()) -> {ok, user()} | {error, gleam@json:decode_error()}. from_json(Json_string) -> gleam@json:decode(Json_string, decoder()). -spec query_params_from_get_users_request(get_users_request()) -> list({binary(), binary()}). query_params_from_get_users_request(Req) -> To_query_param_list = fun(Input) -> _pipe = erlang:element(2, Input), _pipe@2 = gleam@option:map(_pipe, fun(Values) -> _pipe@1 = Values, gleam@list:map( _pipe@1, fun(Value) -> {erlang:element(1, Input), Value} end ) end), gleam@option:unwrap(_pipe@2, []) end, _pipe@3 = [{<<"id"/utf8>>, erlang:element(2, Req)}, {<<"login"/utf8>>, erlang:element(3, Req)}], _pipe@4 = gleam@list:map(_pipe@3, To_query_param_list), gleam@list:flatten(_pipe@4). -spec get_users(glitch@api@client:client(), get_users_request()) -> {ok, list(user())} | {error, glitch@error:twitch_error()}. get_users(Client, Request) -> Request@1 = begin _pipe = glitch@api@api_request:new_helix_request(), _pipe@1 = glitch@api@api_request:set_body(_pipe, <<""/utf8>>), _pipe@2 = glitch@api@api_request:set_query( _pipe@1, query_params_from_get_users_request(Request) ), glitch@api@api_request:set_path(_pipe@2, <<"helix/users"/utf8>>) end, gleam@result:'try'( glitch@api@client:get(Client, Request@1), fun(Response) -> glitch@api@api_response:get_list_data(Response, decoder()) end ).