Current section
Files
Jump to
Current section
Files
lib/swarm.ex
defmodule Swarm do
use GenServer
# Client API
def start do
{:ok, todo_list} = GenServer.start(__MODULE__, [])
todo_list
end
def add_task(todo_list, task) when is_binary(task) do
GenServer.cast(todo_list, {:add, task})
end
def delete_all_tasks(todo_list) do
GenServer.cast(todo_list, {:delete_all})
end
def delete_task(todo_list, task) do
GenServer.cast(todo_list, {:delete, task})
end
def list_tasks(todo_list) do
GenServer.call(todo_list, {:list})
end
# Server API
def handle_cast({:add, task}, tasks) do
{:noreply, [task | tasks]}
end
def handle_cast({:delete_all}, _tasks) do
{:noreply, []}
end
def handle_cast({:delete, task}, tasks) do
{:noreply, tasks -- [task]}
end
def handle_call({:list}, _from, tasks) do
{:reply, tasks, tasks}
end
end