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.decode(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