lib/fdb/coder/behaviour.ex
defmodule FDB.Coder.Behaviour do
@moduledoc """
Refer modules named FDB.Coder.* for sample implementation.
"""
@callback encode(any, opts :: any) :: binary
@callback decode(binary, opts :: any) :: {any, binary}
@callback range(any, opts :: any) :: {binary, binary}
defmacro __using__(_opts) do
quote do
@behaviour FDB.Coder.Behaviour
@impl true
def range(nil, _), do: {<<>>, <<>>}
def range(value, opts), do: {encode(value, opts), <<>>}
defoverridable FDB.Coder.Behaviour
end
end
end