Packages

A Gleam library for interacting with the Discord API

Current section

Files

Jump to
shimmer src shimmer@handlers.erl
Raw

src/shimmer@handlers.erl

-module(shimmer@handlers).
-compile(no_auto_import).
-export([on_ready/2, on_message/2, on_heartbeat_ack/2, on_disconnect/2, new_builder/0, handlers_from_builder/1]).
-export_type([handlers_builder/1, handlers/1]).
-type handlers_builder(HYR) :: {handlers_builder,
gleam@option:option(fun((shimmer@ws@packets@ready:ready_packet(), shimmer@client:client(HYR)) -> nil)),
gleam@option:option(fun((shimmer@ws@packets@message_create:message_create(), shimmer@client:client(HYR)) -> nil)),
gleam@option:option(fun((shimmer@client:client(HYR)) -> nil)),
gleam@option:option(fun((integer(), shimmer@client:client(HYR)) -> nil))}.
-type handlers(HYS) :: {handlers,
fun((shimmer@ws@packets@ready:ready_packet(), shimmer@client:client(HYS)) -> nil),
fun((shimmer@ws@packets@message_create:message_create(), shimmer@client:client(HYS)) -> nil),
fun((shimmer@client:client(HYS)) -> nil),
fun((integer(), shimmer@client:client(HYS)) -> nil)}.
-spec on_ready(
handlers_builder(HZR),
fun((shimmer@ws@packets@ready:ready_packet(), shimmer@client:client(HZR)) -> nil)
) -> handlers_builder(HZR).
on_ready(Builder, F) ->
erlang:setelement(2, Builder, {some, F}).
-spec on_message(
handlers_builder(HZV),
fun((shimmer@ws@packets@message_create:message_create(), shimmer@client:client(HZV)) -> nil)
) -> handlers_builder(HZV).
on_message(Builder, F) ->
erlang:setelement(3, Builder, {some, F}).
-spec on_heartbeat_ack(
handlers_builder(HZZ),
fun((shimmer@client:client(HZZ)) -> nil)
) -> handlers_builder(HZZ).
on_heartbeat_ack(Builder, F) ->
erlang:setelement(4, Builder, {some, F}).
-spec on_disconnect(
handlers_builder(IAD),
fun((integer(), shimmer@client:client(IAD)) -> nil)
) -> handlers_builder(IAD).
on_disconnect(Builder, F) ->
erlang:setelement(5, Builder, {some, F}).
-spec new_builder() -> handlers_builder(any()).
new_builder() ->
{handlers_builder, none, none, none, none}.
-spec handlers_from_builder(handlers_builder(IAJ)) -> handlers(IAJ).
handlers_from_builder(Builder) ->
{handlers,
begin
_pipe = erlang:element(2, Builder),
gleam@option:unwrap(_pipe, fun(_, _) -> nil end)
end,
begin
_pipe@1 = erlang:element(3, Builder),
gleam@option:unwrap(_pipe@1, fun(_, _) -> nil end)
end,
begin
_pipe@2 = erlang:element(4, Builder),
gleam@option:unwrap(_pipe@2, fun(_) -> nil end)
end,
begin
_pipe@3 = erlang:element(5, Builder),
gleam@option:unwrap(_pipe@3, fun(_, _) -> nil end)
end}.