lib/elixir_core/options/osp.ex

# -------------------------------------------------------------------------------
# Author: Keith Brings
# Copyright (C) 2018 Noizu Labs, Inc. All rights reserved.
# -------------------------------------------------------------------------------

defprotocol Noizu.ElixirCore.OSP do
  @doc """
  Extract an option from user provided values
  """
  def extract(this, acc)
end

# end defprotocol Noizu.ERP

defprotocol Noizu.ElixirCore.SlimOptions do
  @fallback_to_any true
  def slim(entity)
end

defimpl Noizu.ElixirCore.SlimOptions, for: Map do
  def slim(entity) do
    Enum.map(entity, fn {k, v} -> {k, Noizu.ElixirCore.SlimOptions.slim(v)} end)
  end
end

defimpl Noizu.ElixirCore.SlimOptions, for: Any do
  def slim(entity) do
    entity
  end
end

defimpl Noizu.ElixirCore.SlimOptions,
  for: [
    Noizu.ElixirCore.OptionSettings,
    Noizu.ElixirCore.OptionValue,
    Noizu.ElixirCore.OptionList
  ] do
  def slim(entity) do
    Noizu.ElixirCore.SlimOptions.slim(Map.from_struct(entity))
  end
end