defmodule Stellar.TxBuild.OptionalSequenceNumber do
@moduledoc """
`OptionalSequenceNumber` struct definition.
"""
alias StellarBase.XDR.OptionalSequenceNumber
alias Stellar.TxBuild.SequenceNumber
@behaviour Stellar.TxBuild.XDR
@type sequence_number :: SequenceNumber.t() | nil
@type t :: %__MODULE__{sequence_number: sequence_number()}
defstruct [:sequence_number]
@impl true
def new(sequence_number \\ nil, opts \\ [])
def new(%SequenceNumber{} = sequence_number, _opts) do
%__MODULE__{sequence_number: sequence_number}
end
def new(nil, _opts), do: %__MODULE__{sequence_number: nil}
@impl true
def to_xdr(%__MODULE__{sequence_number: nil}), do: OptionalSequenceNumber.new()
def to_xdr(%__MODULE__{sequence_number: sequence_number}) do
sequence_number
|> SequenceNumber.to_xdr()
|> OptionalSequenceNumber.new()
end
end