defmodule ExMicrosoftBot.Models.Attachment do @moduledoc """ Microsoft bot attachment structure within the message """ @derive [Poison.Encoder] defstruct [ :contentType, :contentUrl, :content, :name, :thumbnailUrl ] @type json_base_value :: String.t | number | boolean @type json_object :: json_base_value | [json_base_value] | %{optional(String.t) => json_object} @type t :: %ExMicrosoftBot.Models.Attachment{ contentType: String.t, contentUrl: String.t, content: json_object, name: String.t, thumbnailUrl: String.t } @doc """ Decode a map into `ExMicrosoftBot.Models.Attachment` """ @spec parse(map) :: {:ok, ExMicrosoftBot.Models.Attachment.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.Attachment` """ @spec parse(String.t) :: ExMicrosoftBot.Models.Attachment.t def parse(param) when is_binary(param) do Poison.decode!(param, as: decoding_map()) end @doc false def decoding_map() do %ExMicrosoftBot.Models.Attachment{} end end