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