defmodule Nostrum.Struct.Message.Attachment do
@moduledoc """
Struct representing a Discord message attachment.
"""
alias Nostrum.{Snowflake, Util}
defstruct [
:id,
:filename,
:size,
:url,
:proxy_url,
:height,
:width
]
@typedoc "Attachment id"
@type id :: Snowflake.t()
@typedoc "Name of attached file"
@type filename :: String.t()
@typedoc "Size of the file in bytes"
@type size :: integer
@typedoc "Source url of the file"
@type url :: String.t()
@typedoc "Proxy url of the file"
@type proxy_url :: String.t()
@typedoc "Height of the file (if image)"
@type height :: integer | nil
@typedoc "Width of the file (if image)"
@type width :: integer | nil
@type t :: %__MODULE__{
id: id,
filename: filename,
size: size,
url: url,
proxy_url: proxy_url,
height: height,
width: width
}
@doc false
def to_struct(map) do
new =
map
|> Map.new(fn {k, v} -> {Util.maybe_to_atom(k), v} end)
|> Map.update(:id, nil, &Util.cast(&1, Snowflake))
struct(__MODULE__, new)
end
end