Packages

Elixir client SDK for the Surge API

Current section

Files

Jump to
surge_api lib surge messages message.ex
Raw

lib/surge/messages/message.ex

defmodule Surge.Messages.Message do
@moduledoc """
A communication sent to a Contact.
"""
alias Surge.Messages.Attachment
alias Surge.Messages.Conversation
@type t :: %__MODULE__{
id: String.t(),
attachments: list(Attachment.t()),
body: String.t() | nil,
conversation: Conversation.t(),
metadata: map() | nil
}
defstruct [
:id,
:attachments,
:body,
:conversation,
:metadata
]
@doc """
Converts JSON response to Message struct.
## Examples
iex> data = %{"id" => "msg_123", "body" => "Hello"}
iex> Surge.Messages.Message.from_json(data)
%Surge.Messages.Message{id: "msg_123", body: "Hello", attachments: []}
"""
@spec from_json(map()) :: t()
def from_json(data) when is_map(data) do
%__MODULE__{
id: data["id"],
attachments: parse_attachments(data["attachments"]),
body: data["body"],
conversation: Conversation.from_json(data["conversation"]),
metadata: data["metadata"]
}
end
# Private
@spec parse_attachments(list(map()) | nil) :: list(Attachment.t())
defp parse_attachments(nil), do: []
defp parse_attachments(attachments) when is_list(attachments) do
Enum.map(attachments, &Attachment.from_json/1)
end
end