DelegateAccess

Delegates Access callbacks to other modules.

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

Usage

defmodule MyModule do
  defstruct [:foo, :bar]

  use DelegateAccess, to: Map
end

is sugar for

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.

defmodule MyModule do
  defstruct [:foo, :bar]

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

Installation

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