lib/types/spec.ex

defmodule Soroban.Types.Spec do
  @moduledoc """
  Defines base types constructions.
  """
  alias Stellar.TxBuild.{SCMapEntry, SCVal}

  @type error :: {:error, atom()}
  @type sc_val :: SCVal.t()
  @type map_entry :: SCMapEntry.t()

  @callback new(any()) :: struct() | error()
  @callback to_sc_val(struct()) :: sc_val()
  @callback to_sc_map_entry(struct()) :: map_entry()

  @optional_callbacks to_sc_val: 1, to_sc_map_entry: 1
end