lib/tx_build/variable_opaque.ex

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

  @behaviour Stellar.TxBuild.XDR

  @type value :: String.t()

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

  defstruct [:value]

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

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

  def new(_value, _opts), do: {:error, :invalid_opaque}

  @impl true
  def to_xdr(%__MODULE__{value: value}), do: VariableOpaque.new(value)
  def to_xdr(_struct), do: {:error, :invalid_struct}
end