Current section

Files

Jump to
tornex lib torngen_client schema_object_access.ex
Raw

lib/torngen_client/schema_object_access.ex

defmodule Torngen.Client.SchemaObjectAccess do
@moduledoc false
defmacro __using__(opts) do
quote do
require Logger
@behaviour Access
@doc false
def fetch(%{} = struct, key) do
deprecated_keys = Keyword.get(unquote(opts), :deprecated, [])
if Enum.member?(deprecated_keys, key) do
Logger.notice("Object key `#{key}` of `#{__MODULE__ |> inspect()}` is deprecated")
end
case Map.fetch(Map.from_struct(struct), key) do
:error -> :error
{:ok, value} -> {:ok, value}
end
end
@doc false
def get_and_update(map, key, value), do: Map.get_and_update(map, key, value)
@doc false
def pop(data, key), do: Map.pop(data, key)
end
end
end