lib/remedy/schema/message_reference.ex

defmodule Remedy.Schema.MessageReference do
  @moduledoc """
  Reference Object
  """
  use Remedy.Schema

  @type t :: %__MODULE__{
          message_id: Snowflake.t(),
          channel_id: Snowflake.t(),
          guild_id: Snowflake.t()
        }

  @primary_key false
  embedded_schema do
    field :message_id, Snowflake
    field :channel_id, Snowflake
    field :guild_id, Snowflake
  end

  def changeset(model \\ %__MODULE__{}, params) do
    fields = __MODULE__.__schema__(:fields)
    embeds = __MODULE__.__schema__(:embeds)
    cast_model = cast(model, params, fields -- embeds)

    Enum.reduce(embeds, cast_model, fn embed, cast_model ->
      cast_embed(cast_model, embed)
    end)
  end
end