lib/types/pact_payload.ex

defmodule Kadena.Types.PactPayload do
  @moduledoc """
  `PactPayload` struct definition.
  """

  alias Kadena.Types.{ContPayload, ExecPayload}

  @behaviour Kadena.Types.Spec

  @type cont :: ContPayload.t()
  @type exec :: ExecPayload.t()
  @type payload :: cont() | exec()

  @type t :: %__MODULE__{payload: payload()}

  defstruct [:payload]

  @impl true
  def new(%ContPayload{} = cont), do: %__MODULE__{payload: cont}
  def new(%ExecPayload{} = exec), do: %__MODULE__{payload: exec}
  def new(_args), do: {:error, [payload: :invalid]}
end