Current section
Files
Jump to
Current section
Files
lib/chatx.ex
defmodule Chatx do
@moduledoc """
Public API for the BEAM-native chat engine.
Add `use Chatx` in your own module for ergonomic delegation.
"""
defmacro __using__(_opts) do
quote do
def join(room_id, user_id), do: Chatx.join(room_id, user_id)
def leave(room_id, user_id), do: Chatx.leave(room_id, user_id)
def send_message(room_id, user_id, content),
do: Chatx.send_message(room_id, user_id, content)
def subscribe(room_id), do: Chatx.subscribe(room_id)
end
end
@spec join(term(), term()) :: :ok | {:error, term()}
def join(room_id, user_id) do
:chatx_room.join(room_id, user_id, self())
end
@spec leave(term(), term()) :: :ok
def leave(room_id, user_id) do
:chatx_room.leave(room_id, user_id)
end
@spec subscribe(term()) :: :ok | {:error, term()}
def subscribe(room_id) do
:chatx_room.subscribe(room_id, self())
end
@spec send_message(term(), term(), iodata()) :: :ok | {:error, term()}
def send_message(room_id, user_id, content) do
:chatx_room.send_message(room_id, user_id, content)
end
end