defmodule Soroban.Types.Tuple do @moduledoc """ `Tuple` struct definition. """ @behaviour Soroban.Types.Spec alias Stellar.TxBuild.SCVal defstruct [:values] @type values :: list(struct()) @type errors :: atom() @type t :: %__MODULE__{values: values()} @impl true def new(values) when is_list(values), do: %__MODULE__{values: values} def new(_values), do: {:error, :invalid} @impl true def to_sc_val(%__MODULE__{values: values}) do values |> Enum.map(fn %{__struct__: struct} = arg -> struct.to_sc_val(arg) end) |> (&SCVal.new(vec: &1)).() end def to_sc_val(_error), do: {:error, :invalid_struct_tuple} end