lib/k8s/conn/request_options.ex

defprotocol K8s.Conn.RequestOptions do
  @moduledoc """
  Encapsulates HTTP request options for an authentication provider.
  """

  @fallback_to_any true

  @typedoc """
  HTTP Request options
  """
  @type t :: %__MODULE__{headers: keyword(), ssl_options: keyword()}
  defstruct headers: [], ssl_options: []

  @typedoc """
  `generate/1` response type
  """
  @type generate_t :: {:ok, t} | {:error, K8s.Conn.Error.t() | atom}

  @spec generate(any()) :: generate_t()
  def generate(auth)
end

defimpl K8s.Conn.RequestOptions, for: Map do
  @spec generate(map()) :: K8s.Conn.RequestOptions.generate_t()
  def generate(map), do: {:ok, struct(K8s.Conn.RequestOptions, map)}
end

defimpl K8s.Conn.RequestOptions, for: Any do
  @spec generate(any()) :: K8s.Conn.RequestOptions.generate_t()
  def generate(_), do: {:ok, %K8s.Conn.RequestOptions{}}
end