defmodule MessengerBot.Component.Message.Attachment do @moduledoc """ Structure and type for attachment """ alias MessengerBot.Component.Message.{ButtonTemplatePayload, GenericTemplatePayload, ListTemplatePayload, OpenGraphTemplatePayload} @derive [Poison.Encoder] defstruct [:type, :payload] @type t :: %__MODULE__{ type: String.t, payload: ButtonTemplatePayload.t | GenericTemplatePayload.t | ListTemplatePayload.t | Map.t } @spec button_template(ButtonTemplatePayload.t) :: __MODULE__.t def button_template(%ButtonTemplatePayload{} = button_template_payload) do %__MODULE__{type: "template", payload: button_template_payload} end @spec generic_template(GenericTemplatePayload.t) :: __MODULE__.t def generic_template(%GenericTemplatePayload{} = generic_template_payload) do %__MODULE__{type: "template", payload: generic_template_payload} end @spec open_graph_template(OpenGraphTemplatePayload.t) :: __MODULE__.t def open_graph_template(%OpenGraphTemplatePayload{} = open_graph_template_payload) do %__MODULE__{type: "template", payload: open_graph_template_payload} end @spec list_template(ListTemplatePayload.t) :: __MODULE__.t def list_template(%ListTemplatePayload{} = list_template_payload) do %__MODULE__{type: "template", payload: list_template_payload} end @spec audio_attachment(String.t) :: __MODULE__.t def audio_attachment(url) do %__MODULE__{type: "audio", payload: %{url: url}} end @spec file_attachment(String.t) :: __MODULE__.t def file_attachment(url) do %__MODULE__{type: "file", payload: %{url: url}} end @spec image_attachment(String.t) :: __MODULE__.t def image_attachment(url) do %__MODULE__{type: "image", payload: %{url: url}} end @spec video_attachment(String.t) :: __MODULE__.t def video_attachment(url) do %__MODULE__{type: "video", payload: %{url: url}} end end