GenServer processing

Here is an example.

HTTP Server.

defmodule HttpSrv do

  use Maru.Router
  plug(Plug.Logger)
  require Logger
  plug CORSPlug

  post do
    Logger.info("[Maru] Received a post request.")
  
    ## Start the processing of each request
    resp = Calculator.calc(5, 5)
    Maru.Response.json(conn, %{response: resp})
  end

end

The GenServer module.

defmodule Calculator do

  use GenServer
  require Logger

  ## Client API

  def start_link(_arg) do
    GenServer.start_link(__MODULE__, :ok, name: __MODULE__)
  end

  def calc(a, b) do
    GenServer.call(__MODULE__, {:calc, a, b}, :infinity)
  end

  ## Server Callbacks

  def init(:ok) do
    {:ok, %{}}
  end

  def handle_call({:calc, a, b}, _from, state) do
    result = a + b
    {:reply, result, state}
  end

end