lib/tx_build/optional_flags.ex

defmodule Stellar.TxBuild.OptionalFlags do
  @moduledoc """
  `OptionalFlags` struct definition.
  """
  alias StellarBase.XDR.OptionalUInt32
  alias Stellar.TxBuild.Flags

  @behaviour Stellar.TxBuild.XDR

  @type flags :: Flags.t() | nil

  @type t :: %__MODULE__{flags: flags()}

  defstruct [:flags]

  @impl true
  def new(flags \\ nil, opts \\ [])

  def new(%Flags{} = flags, _opts) do
    %__MODULE__{flags: flags}
  end

  def new(nil, _opts), do: %__MODULE__{flags: nil}

  @impl true
  def to_xdr(%__MODULE__{flags: nil}), do: OptionalUInt32.new()

  def to_xdr(%__MODULE__{flags: flags}) do
    flags
    |> Flags.to_xdr()
    |> OptionalUInt32.new()
  end
end