lib/models/channel_account.ex

defmodule ExMicrosoftBot.Models.ChannelAccount do
  @moduledoc """
  Microsoft bot channel account structure which corresponde to a user or bot
  """

  @derive [Poison.Encoder]
  defstruct [:id, :name, :objectId, :givenName, :surname, :email, :userPrincipalName, :tenantId]

  @type t :: %ExMicrosoftBot.Models.ChannelAccount{
          id: String.t(),
          name: String.t(),
          objectId: String.t(),
          givenName: String.t(),
          surname: String.t(),
          email: String.t(),
          userPrincipalName: String.t(),
          tenantId: String.t()
        }

  @doc """
  Decode a map into `ExMicrosoftBot.Models.ChannelAccount`
  """
  @spec parse(map) :: {:ok, ExMicrosoftBot.Models.ChannelAccount.t()}
  def parse(param) when is_map(param) do
    {:ok, Poison.Decode.transform(param, %{as: decoding_map()})}
  end

  @doc """
  Decode a list of maps into a list of `ExMicrosoftBot.Models.ChannelAccount`
  """
  @spec parse(list) :: {:ok, [ExMicrosoftBot.Models.ChannelAccount.t()]}
  def parse(param) when is_list(param) do
    {:ok, Poison.Decode.transform(param, %{as: [decoding_map()]})}
  end

  @doc """
  Decode a string into `ExMicrosoftBot.Models.ChannelAccount`
  """
  @spec parse(String.t()) :: ExMicrosoftBot.Models.ChannelAccount.t()
  def parse(param) when is_binary(param) do
    elem(parse(Poison.decode!(param)), 1)
  end

  @doc false
  def decoding_map() do
    %ExMicrosoftBot.Models.ChannelAccount{}
  end
end