Current section

Files

Jump to
glixir src glixir@pubsub.erl
Raw

src/glixir@pubsub.erl

-module(glixir@pubsub).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/glixir/pubsub.gleam").
-export([start_pubsub/1, subscribe/2, broadcast/3, unsubscribe/2]).
-export_type([pub_sub/0, pub_sub_error/0, pub_sub_start_result/0, pub_sub_subscribe_result/0, pub_sub_broadcast_result/0, pub_sub_unsubscribe_result/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" PubSub support for distributed messaging\n"
" \n"
" This module provides a Gleam-friendly interface to Phoenix.PubSub,\n"
" using our Elixir helper module for clean data conversion.\n"
).
-opaque pub_sub() :: {pub_sub, gleam@erlang@process:pid_()}.
-type pub_sub_error() :: {start_error, binary()} |
{subscribe_error, binary()} |
{broadcast_error, binary()} |
{unsubscribe_error, binary()}.
-type pub_sub_start_result() :: {pubsub_start_ok, gleam@erlang@process:pid_()} |
{pubsub_start_error, gleam@dynamic:dynamic_()}.
-type pub_sub_subscribe_result() :: pubsub_subscribe_ok |
{pubsub_subscribe_error, gleam@dynamic:dynamic_()}.
-type pub_sub_broadcast_result() :: pubsub_broadcast_ok |
{pubsub_broadcast_error, gleam@dynamic:dynamic_()}.
-type pub_sub_unsubscribe_result() :: pubsub_unsubscribe_ok |
{pubsub_unsubscribe_error, gleam@dynamic:dynamic_()}.
-file("src/glixir/pubsub.gleam", 75).
?DOC(" Start a new PubSub system with the given name\n").
-spec start_pubsub(binary()) -> {ok, pub_sub()} | {error, pub_sub_error()}.
start_pubsub(Name) ->
case 'Elixir.Glixir.PubSub':start_pubsub(Name) of
{pubsub_start_ok, Pid} ->
{ok, {pub_sub, Pid}};
{pubsub_start_error, Reason} ->
{error, {start_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/pubsub.gleam", 83).
?DOC(" Subscribe the current process to a topic\n").
-spec subscribe(binary(), binary()) -> {ok, nil} | {error, pub_sub_error()}.
subscribe(Pubsub_name, Topic) ->
case 'Elixir.Glixir.PubSub':subscribe(Pubsub_name, Topic) of
pubsub_subscribe_ok ->
{ok, nil};
{pubsub_subscribe_error, Reason} ->
{error, {subscribe_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/pubsub.gleam", 92).
?DOC(" Broadcast a message to all subscribers of a topic\n").
-spec broadcast(binary(), binary(), any()) -> {ok, nil} |
{error, pub_sub_error()}.
broadcast(Pubsub_name, Topic, Message) ->
case 'Elixir.Glixir.PubSub':broadcast(
Pubsub_name,
Topic,
gleam_stdlib:identity(Message)
) of
pubsub_broadcast_ok ->
{ok, nil};
{pubsub_broadcast_error, Reason} ->
{error, {broadcast_error, gleam@string:inspect(Reason)}}
end.
-file("src/glixir/pubsub.gleam", 105).
?DOC(" Unsubscribe the current process from a topic\n").
-spec unsubscribe(binary(), binary()) -> {ok, nil} | {error, pub_sub_error()}.
unsubscribe(Pubsub_name, Topic) ->
case 'Elixir.Glixir.PubSub':unsubscribe(Pubsub_name, Topic) of
pubsub_unsubscribe_ok ->
{ok, nil};
{pubsub_unsubscribe_error, Reason} ->
{error, {unsubscribe_error, gleam@string:inspect(Reason)}}
end.