Current section
Files
Jump to
Current section
Files
src/discord_gleam@ws@packets@ready.erl
-module(discord_gleam@ws@packets@ready).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([string_to_data/1]).
-export_type([ready_user/0, ready_data/0, ready_packet/0]).
-type ready_user() :: {ready_user, binary()}.
-type ready_data() :: {ready_data, integer(), ready_user()}.
-type ready_packet() :: {ready_packet,
binary(),
integer(),
integer(),
ready_data()}.
-spec string_to_data(binary()) -> {ok, ready_packet()} | {error, binary()}.
string_to_data(Encoded) ->
Decoder = gleam@dynamic:decode4(
fun(Field@0, Field@1, Field@2, Field@3) -> {ready_packet, Field@0, Field@1, Field@2, Field@3} end,
gleam@dynamic:field(<<"t"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(<<"s"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(<<"op"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(
<<"d"/utf8>>,
gleam@dynamic:decode2(
fun(Field@0, Field@1) -> {ready_data, Field@0, Field@1} end,
gleam@dynamic:field(<<"v"/utf8>>, fun gleam@dynamic:int/1),
gleam@dynamic:field(
<<"user"/utf8>>,
gleam@dynamic:decode1(
fun(Field@0) -> {ready_user, Field@0} end,
gleam@dynamic:field(
<<"username"/utf8>>,
fun gleam@dynamic:string/1
)
)
)
)
)
),
_pipe = gleam@json:decode(Encoded, Decoder),
gleam@result:map_error(
_pipe,
fun(_) -> <<"Failed to decode MessagePacket"/utf8>> end
).