lib/tx_build/optional_string32.ex

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

  @behaviour Stellar.TxBuild.XDR

  @type value :: String32.t() | nil

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

  defstruct [:value]

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

  def new(%String32{} = value, _opts) do
    %__MODULE__{value: value}
  end

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

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

  def to_xdr(%__MODULE__{value: value}) do
    value
    |> String32.to_xdr()
    |> OptionalString32.new()
  end
end