Current section
Files
Jump to
Current section
Files
src/discord_gleam@ws@packets@message.erl
-module(discord_gleam@ws@packets@message).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([string_to_data/1]).
-export_type([message_author/0, message_packet_data/0, message_packet/0]).
-type message_author() :: {message_author, binary(), binary()}.
-type message_packet_data() :: {message_packet_data,
binary(),
binary(),
binary(),
message_author(),
binary()}.
-type message_packet() :: {message_packet,
binary(),
integer(),
integer(),
message_packet_data()}.
-spec string_to_data(binary()) -> {ok, message_packet()} | {error, binary()}.
string_to_data(Encoded) ->
Decoder = gleam@dynamic:decode4(
fun(Field@0, Field@1, Field@2, Field@3) -> {message_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:decode5(
fun(Field@0, Field@1, Field@2, Field@3, Field@4) -> {message_packet_data, Field@0, Field@1, Field@2, Field@3, Field@4} end,
gleam@dynamic:field(
<<"content"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(
<<"guild_id"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(
<<"channel_id"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(
<<"author"/utf8>>,
gleam@dynamic:decode2(
fun(Field@0, Field@1) -> {message_author, Field@0, Field@1} end,
gleam@dynamic:field(
<<"id"/utf8>>,
fun gleam@dynamic:string/1
),
gleam@dynamic:field(
<<"username"/utf8>>,
fun gleam@dynamic:string/1
)
)
),
gleam@dynamic:field(<<"id"/utf8>>, fun gleam@dynamic:string/1)
)
)
),
_pipe = gleam@json:decode(Encoded, Decoder),
gleam@result:map_error(
_pipe,
fun(_) -> <<"Failed to decode MessagePacket"/utf8>> end
).