-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.