Current section
Files
Jump to
Current section
Files
src/shimmer@types@user.erl
-module(shimmer@types@user).
-compile(no_auto_import).
-export([from_map/2, from_json_string/1]).
-export_type([user/0]).
-type user() :: {partial_user,
binary(),
binary(),
binary(),
gleam@option:option(binary())} |
{full_user,
binary(),
binary(),
binary(),
gleam@option:option(binary()),
boolean(),
boolean(),
boolean(),
gleam@option:option(binary()),
gleam@option:option(integer()),
boolean(),
gleam@option:option(binary()),
integer(),
integer(),
integer()}.
-spec from_map(
gleam@map:map_(gleam@dynamic:dynamic(), gleam@dynamic:dynamic()),
fun((binary()) -> gleam@dynamic:dynamic())
) -> {ok, user()} | {error, shimmer@internal@error:shimmer_error()}.
from_map(Map, Key_func) ->
case begin
_pipe = Map,
shimmer@internal@map_helpers:get_field_safe(
_pipe,
Key_func(<<"id"/utf8>>),
fun shimmer@snowflake:from_dynamic/1
)
end of
{error, _try} -> {error, _try};
{ok, Id} ->
case begin
_pipe@1 = Map,
shimmer@internal@map_helpers:get_field_safe(
_pipe@1,
Key_func(<<"username"/utf8>>),
fun gleam@dynamic:string/1
)
end of
{error, _try@1} -> {error, _try@1};
{ok, Username} ->
case begin
_pipe@2 = Map,
shimmer@internal@map_helpers:get_field_safe(
_pipe@2,
Key_func(<<"discriminator"/utf8>>),
fun gleam@dynamic:string/1
)
end of
{error, _try@2} -> {error, _try@2};
{ok, Discriminator} ->
case begin
_pipe@3 = Map,
shimmer@internal@map_helpers:get_field_safe(
_pipe@3,
Key_func(<<"avatar"/utf8>>),
gleam@dynamic:optional(
fun gleam@dynamic:string/1
)
)
end of
{error, _try@3} -> {error, _try@3};
{ok, Avatar} ->
{ok,
{partial_user,
Id,
Username,
Discriminator,
Avatar}}
end
end
end
end.
-spec from_json_string(binary()) -> {ok, user()} |
{error, shimmer@internal@error:shimmer_error()}.
from_json_string(Encoded) ->
User_decoder = gleam@dynamic:decode4(
fun(Field@0, Field@1, Field@2, Field@3) -> {partial_user, Field@0, Field@1, Field@2, Field@3} end,
gleam@dynamic:field(<<"id"/utf8>>, fun shimmer@snowflake:from_dynamic/1),
gleam@dynamic:field(<<"username"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(
<<"discriminator"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(
<<"avatar"/utf8>>,
gleam@dynamic:optional(fun gleam@dynamic:string/1)
)
),
_pipe = gleam@json:decode(Encoded, User_decoder),
gleam@result:map_error(_pipe, fun(Field@0) -> {invalid_json, Field@0} end).