lib/auth0/entity/log.ex

defmodule Auth0.Entity.Log do
  @moduledoc """
  Documentation for entity of Log.

  """

  defmodule LocationInfo do
    @moduledoc """
    Documentation for entity of Log LocationInfo.

    """

    alias Auth0.Common.Util

    defstruct country_code3: nil,
              country_code: nil,
              country_name: nil,
              city_name: nil,
              latitude: nil,
              longitude: nil,
              time_zone: nil,
              continent_code: nil

    @type t :: %__MODULE__{
            country_code3: String.t(),
            country_code: String.t(),
            country_name: String.t(),
            city_name: String.t(),
            latitude: String.t(),
            longitude: String.t(),
            time_zone: String.t(),
            continent_code: String.t()
          }

    @spec from(map) :: __MODULE__.t()
    def from(value) do
      value |> Util.to_struct(__MODULE__)
    end
  end

  alias Auth0.Common.Util

  defstruct date: nil,
            type: nil,
            description: nil,
            connection: nil,
            connection_id: nil,
            client_id: nil,
            client_name: nil,
            ip: nil,
            hostname: nil,
            user_id: nil,
            user_name: nil,
            audience: nil,
            scope: nil,
            strategy: nil,
            strategy_type: nil,
            log_id: nil,
            isMobile: false,
            details: nil,
            user_agent: nil,
            location_info: nil

  @type t :: %__MODULE__{
          date: String.t(),
          type: String.t(),
          description: String.t(),
          connection: String.t(),
          connection_id: String.t(),
          client_id: String.t(),
          client_name: String.t(),
          ip: String.t(),
          hostname: String.t(),
          user_id: String.t(),
          user_name: String.t(),
          audience: String.t(),
          scope: String.t(),
          strategy: String.t(),
          strategy_type: String.t(),
          log_id: String.t(),
          isMobile: boolean,
          details: map,
          user_agent: String.t(),
          location_info: LocationInfo.t()
        }

  @spec from(map) :: __MODULE__.t()
  def from(value) do
    log = value |> Util.to_struct(__MODULE__)

    if log.location_info |> is_map do
      %{log | location_info: log.location_info |> LocationInfo.from()}
    else
      log
    end
  end
end