lib/holidefs/definition/store.ex

defmodule Holidefs.Definition.Store do
  @moduledoc """
  This module loads and stores all the holiday definitions.
  """

  alias Holidefs.Definition

  definitions = for {c, n} <- Holidefs.locales(), do: Definition.load!(c, n)

  @doc """
  Returns all the loaded definitions with their rules
  """
  @spec all_definitions :: [Holidefs.Definition.t()]
  def all_definitions, do: unquote(Macro.escape(definitions))

  @doc """
  Returns the definitions for the given locale
  """
  @spec get_definition(Holidefs.locale_code()) :: Holidefs.Definition.t() | nil
  for definition <- definitions do
    def get_definition(unquote(definition.code)), do: unquote(Macro.escape(definition))
    def get_definition(unquote(to_string(definition.code))), do: unquote(Macro.escape(definition))
  end

  def get_definition(_), do: nil
end