lib/tx_build/sc_map_entry.ex

defmodule Stellar.TxBuild.SCMapEntry do
  @moduledoc """
  `SCMapEntry` struct definition.
  """

  @behaviour Stellar.TxBuild.XDR

  alias Stellar.TxBuild.SCVal
  alias StellarBase.XDR.SCMapEntry

  @type t :: %__MODULE__{key: SCVal.t(), val: SCVal.t()}

  defstruct [:key, :val]

  @impl true
  def new(key, val, opts \\ nil)

  def new(%SCVal{} = key, %SCVal{} = val, _opts), do: %__MODULE__{key: key, val: val}

  def new(_key, _val, _opts), do: {:error, :invalid_sc_map_entry}

  @impl true
  def to_xdr(%__MODULE__{key: key, val: val}) do
    key = SCVal.to_xdr(key)
    val = SCVal.to_xdr(val)

    SCMapEntry.new(key, val)
  end
end