defmodule DataSchema.MapAccessor do
@moduledoc """
Defines a way to use elixir maps as an input data source. This will `Map.get/2` the fields
from the source data, meaning it will return nil in the case of the key being missing.
"""
@behaviour DataSchema.DataAccessBehaviour
@impl true
@doc """
Accesses the source data using `Map.get/2` when a `:field` type is encountered during
struct creation. If the incoming data is not a map we will function clause error.
"""
def field(data = %{}, field), do: Map.get(data, field)
@impl true
@doc """
Accesses the source data using `Map.get/2` when a `:list_of` type is encountered during
struct creation.
"""
def list_of(data = %{}, field), do: Map.get(data, field)
@impl true
@doc """
Accesses the source data using `Map.get/2` when a `:has_one` type is encountered during
struct creation.
"""
def has_one(data = %{}, field), do: Map.get(data, field)
@impl true
@doc """
Accesses the source data using `Map.get/2` when a `:has_many` type is encountered during
struct creation.
"""
def has_many(data = %{}, field), do: Map.get(data, field)
end