Current section

Files

Jump to
kujira lib kujira node.ex
Raw

lib/kujira/node.ex

defmodule Kujira.Node do
defmacro __using__(opts \\ []) do
pubsub = Keyword.get(opts, :pubsub, Kujira.PubSub)
quote do
use Supervisor
require Logger
defmodule Websocket do
use Kujira.Node.Websocket,
pubsub: unquote(pubsub),
subscriptions: Keyword.get(unquote(opts), :subscriptions, [])
end
defmodule Grpc do
use Kujira.Node.Grpc
end
def start_link(opts) do
Supervisor.start_link(__MODULE__, :ok, opts)
end
@impl true
def init(_) do
config = Application.get_env(Keyword.get(unquote(opts), :otp_app), __MODULE__, [])
socket_opts = Keyword.merge(config, unquote(opts))
children = [
{__MODULE__.Grpc, config},
{__MODULE__.Websocket, socket_opts}
]
Supervisor.init(children, strategy: :one_for_one, name: __MODULE__.Supervisor)
end
def channel() do
__MODULE__.Grpc.channel()
end
def subscribe(topic) do
Phoenix.PubSub.subscribe(unquote(pubsub), topic)
end
end
end
end