lib/models/attachment_info.ex

defmodule ExMicrosoftBot.Models.AttachmentInfo do
  @moduledoc """
  Microsoft bot attachment info structure
  """

  alias ExMicrosoftBot.Models.AttachmentView

  @derive [Poison.Encoder]
  defstruct [:name, :type, :views]

  @type t :: %ExMicrosoftBot.Models.AttachmentInfo{
    name: String.t,
    type: String.t,
    views: [AttachmentView]
  }

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

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

  @doc """
  Encodes the `ExMicrosoftBot.Models.AttachmentInfo` to json string
  """
  @spec serialize(ExMicrosoftBot.Models.AttachmentInfo.t) :: String.t
  def serialize(%ExMicrosoftBot.Models.AttachmentInfo{} = bot_data) do
    Poison.encode!(bot_data)
  end

  @doc false
  def decoding_map() do
    %ExMicrosoftBot.Models.AttachmentInfo {
      views: [AttachmentView.decoding_map()]
    }
  end
end