-module(shimmer). -compile(no_auto_import). -export([handlers_builder/0, on_ready/2, on_message/2, handlers_from_builder/1, connect/1]). -export_type([handlers_builder/0, handlers/0, client/0]). -type handlers_builder() :: {handlers_builder, gleam@option:option(fun(() -> nil)), gleam@option:option(fun((shimmer@types@message:message()) -> nil))}. -type handlers() :: {handlers, fun(() -> nil), fun((shimmer@types@message:message()) -> nil)}. -type client() :: {client, binary(), handlers(), integer()}. -spec handlers_builder() -> handlers_builder(). handlers_builder() -> {handlers_builder, none, none}. -spec on_ready(handlers_builder(), fun(() -> nil)) -> handlers_builder(). on_ready(Builder, F) -> erlang:setelement(2, Builder, {some, F}). -spec on_message( handlers_builder(), fun((shimmer@types@message:message()) -> nil) ) -> handlers_builder(). on_message(Builder, F) -> erlang:setelement(3, Builder, {some, F}). -spec handlers_from_builder(handlers_builder()) -> handlers(). 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}. -spec connect(client()) -> nil. connect(Client) -> shimmer@ws@event_loop:websocket_actor( {identify_info, erlang:element(2, Client), erlang:element(4, Client)} ), nil.