Current section

Files

Jump to
agala lib provider provider.ex
Raw

lib/provider/provider.ex

defmodule Agala.Provider do
@moduledoc """
Behaviour that defines root structure for Agala provider
"""
# @doc """
# This function defines names for `Agala.Reciever` module for specific provider.
# This adds some portion of flexibility for provider creators - the are not forced
# to follow any naming convention.
# ## Examples
# iex> Agala.Provider.Vk.get_receiver
# Agala.Provider.Vk.Receiver
# iex> Agala.Provider.Telegram.get_receiver
# Agala.Provider.Telegram.Receiver
# """
@callback get_bot(:poller | :plug | :handler) :: atom
@typedoc """
Provider is represented by it's module name
"""
@type t :: atom()
defmacro __using__(_opts) do
quote location: :keep do
@behaviour Agala.Provider
def get_bot(:poller) do
Module.concat(__MODULE__, Poller)
end
def get_bot(:plug) do
Module.concat(__MODULE__, Plug)
end
def get_bot(:handler) do
Module.concat(__MODULE__, Handler)
end
defoverridable get_bot: 1
end
end
end