README.md

# DelegateAccess

Delegates `Access` callbacks to other modules.

It's a small macro, but handy if your codebase is filled with structs.

## Usage

```elixir
defmodule MyModule do
  defstruct [:foo, :bar]

  use DelegateAccess, to: Map
end
```

is sugar for

```elixir
defmodule MyModule do
  defstruct [:foo, :bar]

  @behaviour Access

  defdelegate fetch(conf, key), to: Map
  defdelegate get(conf, key), to: Map
  defdelegate get(conf, key, default), to: Map
  defdelegate get_and_update(conf, key, fun), to: Map
  defdelegate pop(conf, key), to: Map
  defdelegate pop(conf, key, default), to: Map

  defoverridable [fetch: 2, get: 3, get_and_update: 3, pop: 2]
end
```

You can also mix and match.

```elixir
defmodule MyModule do
  defstruct [:foo, :bar]

  use DelegateAccess, to: Map, only: [fetch: 2]
  use DelegateAccess, to: Keyword, only: [get: 3]
end
```

## Installation

```elixir
def deps do
  [
    {:delegate_access, "~> 0.1.0"}
  ]
end
```