lib/tx_build/sequence_number.ex

defmodule Stellar.TxBuild.SequenceNumber do
  @moduledoc """
  `SequenceNumber` struct definition.
  """
  alias StellarBase.XDR.SequenceNumber

  @behaviour Stellar.TxBuild.XDR

  @type t :: %__MODULE__{sequence_number: non_neg_integer()}

  defstruct [:sequence_number]

  @impl true
  def new(sequence_number \\ 0, opts \\ [])

  def new(sequence_number, _opts) when is_integer(sequence_number) and sequence_number >= 0 do
    %__MODULE__{sequence_number: sequence_number}
  end

  def new(_sequence_number, _opts), do: {:error, :sequence_number}

  @impl true
  def to_xdr(%__MODULE__{sequence_number: sequence_number}) do
    SequenceNumber.new(sequence_number)
  end
end