lib/workos/user_management/authentication.ex

defmodule WorkOS.UserManagement.Authentication do
  @moduledoc """
  WorkOS Authentication struct.
  """

  alias WorkOS.UserManagement.User

  @behaviour WorkOS.Castable

  @type t() :: %__MODULE__{
          user: User.t(),
          organization_id: String.t() | nil,
          access_token: String.t() | nil,
          refresh_token: String.t() | nil,
          impersonator: User.t() | nil,
          authentication_method: String.t()
        }

  @enforce_keys [
    :user,
    :authentication_method
  ]
  defstruct [
    :user,
    :organization_id,
    :access_token,
    :refresh_token,
    :impersonator,
    :authentication_method
  ]

  @impl true
  def cast(map) do
    %__MODULE__{
      user: map["user"],
      organization_id: map["organization_id"],
      access_token: map["access_token"],
      refresh_token: map["refresh_token"],
      impersonator: map["impersonator"],
      authentication_method: map["authentication_method"]
    }
  end
end