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