Current section
Files
Jump to
Current section
Files
lib/sendinc/interface.ex
defmodule Sendinc.Interface do
@moduledoc """
This module defines behaviour an interface must implement to work with
this package.
"""
@callback create(map, atom) :: {:ok, term} | {:error, term}
@callback get(map, atom) :: {:ok, term} | {:error, term}
defmacro __using__(opts) do
quote do
@behaviour unquote(__MODULE__)
def create(params, requester \\ :default) do
struct()
|> schema.changeset(params)
|> translator().translate(:create)
|> get_requester(requester).request()
end
def get(params, requester \\ :default) do
struct()
|> schema.changeset(params)
|> translator().translate(:get)
|> get_requester(requester).request()
end
def schema() do
@schema
end
defp translator() do
@translator
end
defp struct() do
@struct
end
defp get_requester(:default), do: Sendinc.Config.requester()
defp get_requester(requester), do: requester
defoverridable [create: 2, get: 2]
end
end
end