* using Plugin.GenServer now uses Plugin.Base so that is not required * Remove Omnibot.Plugin because all it did was include Plugin.GenServer and Plugin.Base Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
51 lines
1.1 KiB
Elixir
51 lines
1.1 KiB
Elixir
defmodule Omnibot.Plugin.GenServer do
|
|
defmacro __using__([]) do
|
|
quote do
|
|
use Omnibot.Plugin.Base
|
|
use GenServer
|
|
|
|
def start_link(opts) do
|
|
cfg = opts[:cfg]
|
|
state = opts[:state]
|
|
GenServer.start_link(__MODULE__, {cfg, state}, opts)
|
|
end
|
|
|
|
def cfg() do
|
|
GenServer.call(__MODULE__, :cfg)
|
|
end
|
|
|
|
def state() do
|
|
GenServer.call(__MODULE__, :state)
|
|
end
|
|
|
|
def update_state(update) do
|
|
GenServer.cast(__MODULE__, {:state, update})
|
|
end
|
|
|
|
## Server callbacks
|
|
|
|
@impl GenServer
|
|
def init({cfg, state}) do
|
|
state = state || on_init(cfg)
|
|
{:ok, {cfg, state}}
|
|
end
|
|
|
|
@impl GenServer
|
|
def handle_call(:cfg, _from, {cfg, state}) do
|
|
{:reply, cfg, {cfg, state}}
|
|
end
|
|
|
|
@impl GenServer
|
|
def handle_call(:state, _from, {cfg, state}) do
|
|
{:reply, state, {cfg, state}}
|
|
end
|
|
|
|
@impl GenServer
|
|
def handle_cast({:state, update}, {cfg, state}) do
|
|
{:noreply, {cfg, apply(update, [state])}}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|