Packages
stellar_sdk
0.18.0
0.23.0
0.22.0
0.21.2
0.21.1
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Elixir SDK for the Stellar network.
Current section
Files
Jump to
Current section
Files
lib/tx_build/sc_vec.ex
defmodule Stellar.TxBuild.SCVec do
@moduledoc """
`ScVec` struct definition.
"""
alias Stellar.TxBuild.SCVal
alias StellarBase.XDR.SCValList
@behaviour Stellar.TxBuild.XDR
@type error :: {:error, atom()}
@type validation :: {:ok, any()} | error()
@type items :: list(SCVal.t())
@type t :: %__MODULE__{items: items()}
defstruct [:items]
@impl true
def new(items, opts \\ [])
def new(items, _opts) when is_list(items) do
with {:ok, items} <- validate_vec_items(items) do
%__MODULE__{items: items}
end
end
def new(_items, _opts), do: {:error, :invalid_sc_vec}
@impl true
def to_xdr(%__MODULE__{items: items}) do
items
|> Enum.map(&SCVal.to_xdr/1)
|> SCValList.new()
end
@spec validate_vec_items(items :: items()) :: validation()
defp validate_vec_items(items) do
if Enum.all?(items, &is_sc_val?/1),
do: {:ok, items},
else: {:error, :invalid_vec}
end
@spec is_sc_val?(value :: any()) :: boolean()
defp is_sc_val?(%SCVal{}), do: true
defp is_sc_val?(_), do: false
end