Current section

Files

Jump to
messenger_bot lib messenger_bot components message attachment.ex
Raw

lib/messenger_bot/components/message/attachment.ex

defmodule MessengerBot.Component.Message.Attachment do
@moduledoc """
Structure and type for attachment
"""
alias MessengerBot.Component.Message.{
ButtonTemplatePayload,
GenericTemplatePayload,
ListTemplatePayload,
OpenGraphTemplatePayload
}
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