defmodule ExMicrosoftBot.Models.Activity do @moduledoc """ Microsoft bot attachment structure for the activity sent to the conversation """ @derive [Poison.Encoder] defstruct [ :type, :id, :timestamp, :serviceUrl, :channelId, :from, :conversation, :recipient, :textFormat, :attachmentLayout, :membersAdded, :membersRemoved, :reactionsAdded, :reactionsRemoved, :topicName, :historyDisclosed, :locale, :text, :speak, :summary, :attachments, :entities, :suggestedActions, :channelData, :action, :replyToId, :code, :inputHint, :value ] @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.Activity{ type: String.t(), id: String.t(), timestamp: String.t(), serviceUrl: String.t(), channelId: String.t(), from: ExMicrosoftBot.Models.ChannelAccount.t(), conversation: ExMicrosoftBot.Models.ConversationAccount.t(), recipient: ExMicrosoftBot.Models.ChannelAccount.t(), textFormat: String.t(), attachmentLayout: String.t(), membersAdded: [ExMicrosoftBot.Models.ChannelAccount.t()], membersRemoved: [ExMicrosoftBot.Models.ChannelAccount.t()], reactionsAdded: [ExMicrosoftbot.Models.Reaction.t()], reactionsRemoved: [ExMicrosoftbot.Models.Reaction.t()], topicName: String.t(), historyDisclosed: boolean, locale: String.t(), text: String.t(), speak: String.t(), summary: String.t(), attachments: [ExMicrosoftBot.Models.Attachment.t()], entities: [ExMicrosoftBot.Models.Entity.t()], suggestedActions: [ExMicrosoftBot.Models.SuggestedAction.t()], channelData: map, action: String.t(), inputHint: String.t(), code: String.t(), replyToId: String.t(), value: json_object } @doc """ Decode a map into `ExMicrosoftBot.Models.Activity` """ @spec parse(map) :: {:ok, ExMicrosoftBot.Models.Activity.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.Activity` """ @spec parse(String.t()) :: ExMicrosoftBot.Models.Activity.t() def parse(param) when is_binary(param) do Poison.decode!(param, as: decoding_map()) end @doc false def decoding_map() do %ExMicrosoftBot.Models.Activity{ from: ExMicrosoftBot.Models.ChannelAccount.decoding_map(), conversation: ExMicrosoftBot.Models.ConversationAccount.decoding_map(), recipient: ExMicrosoftBot.Models.ChannelAccount.decoding_map(), membersAdded: [ExMicrosoftBot.Models.ChannelAccount.decoding_map()], membersRemoved: [ExMicrosoftBot.Models.ChannelAccount.decoding_map()], reactionsAdded: [ExMicrosoftBot.Models.Reaction.decoding_map()], reactionsRemoved: [ExMicrosoftBot.Models.Reaction.decoding_map()], attachments: [ExMicrosoftBot.Models.Attachment.decoding_map()], entities: [ExMicrosoftBot.Models.Entity.decoding_map()], suggestedActions: [ExMicrosoftBot.Models.SuggestedAction.decoding_map()], channelData: %{} } end end