lib/cldr/time_zone_name/info.ex

defmodule Cldr.TimeZoneName.Info do
  @moduledoc """
  Time zone name info.
  """

  alias Cldr.TimeZoneName.Variants

  defstruct [:long, :short, :exemplar_city]

  @type t :: %__MODULE__{
          long: Variants.t(),
          short: Variants.t(),
          exemplar_city: String.t() | nil
        }

  @doc """
  Builds a metazone struct for the given data.
  """
  @spec new(zone_data :: map() | nil, meta_zone_data :: map() | nil) :: t()
  def new(zone_data, meta_zone_data) do
    zone_data = zone_data || %{}
    meta_zone_data = meta_zone_data || %{}

    %__MODULE__{
      long: build_variants(zone_data[:long], meta_zone_data[:long]),
      short: build_variants(zone_data[:short], meta_zone_data[:short]),
      exemplar_city: zone_data[:exemplar_city] || meta_zone_data[:exemplar_city]
    }
  end

  defp build_variants(zone_data, meta_zone_data) do
    %Variants{
      generic: zone_data[:generic] || meta_zone_data[:generic],
      standard: zone_data[:standard] || meta_zone_data[:standard],
      daylight: zone_data[:daylight] || meta_zone_data[:daylight]
    }
  end
end