defmodule Stellar.TxBuild.Operations do @moduledoc """ `Operations` struct definition. """ alias Stellar.TxBuild.Operation alias StellarBase.XDR.Operations @behaviour Stellar.TxBuild.XDR @type t :: %__MODULE__{operations: list(Operation.t()), count: non_neg_integer()} defstruct [:operations, :count] @impl true def new(operations \\ [], opts \\ []) def new(operations, _opts) do %__MODULE__{operations: operations, count: 0} end @impl true def to_xdr(%__MODULE__{operations: operations}) do operations |> Enum.map(&Operation.to_xdr/1) |> Operations.new() end @spec add(operations :: t(), operation :: Operation.t()) :: t() def add(%__MODULE__{operations: operations, count: count}, %Operation{} = operation) do %__MODULE__{operations: operations ++ [operation], count: count + 1} end end