README.md

# Diex

A simple macro to automatically generate dynamic dispatching for a module's callbacks.

Diex introduces a single `use` macro that when used in a module with any callbacks
and given an `adapter` module implementing them, generates it's dynamic dispatchers via
defdelegate.



## Usage w/ Examples

We need a callback module (where the dispatcher will be generated via `use Diex, adapter: Adapter`) where Adapter is any module implementing that behaviour.

```elixir
defmodule Greetable do
  use Diex, adapter: GreetingAdapter
  
  @callback greet() :: String.t()
end

defmodule GreetingAdapter do
  @behaviour Greetable

  @impl Greetable
  def greet(), do: "Hello World!"
end

iex> GreetingAdapter.greet()
"Hello World!"
```

## Installation

If [available in Hex](https://hex.pm/docs/publish), the package can be installed
by adding `diex` to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [
    {:diex, "~> 1.0"}
  ]
end
```

Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc)
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
be found at [https://hexdocs.pm/diex](https://hexdocs.pm/diex).