lib/tx_build/ledger/account.ex

defmodule Stellar.TxBuild.Ledger.Account do
  @moduledoc """
  Ledger `Account` struct definition.
  """
  alias StellarBase.XDR.Account
  alias Stellar.TxBuild.AccountID

  @behaviour Stellar.TxBuild.XDR

  @type t :: %__MODULE__{account_id: AccountID.t()}

  defstruct [:account_id]

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

  def new(account_id, _opts) do
    case AccountID.new(account_id) do
      %AccountID{} = account_id -> %__MODULE__{account_id: account_id}
      error -> error
    end
  end

  @impl true
  def to_xdr(%__MODULE__{account_id: account_id}) do
    account_id
    |> AccountID.to_xdr()
    |> Account.new()
  end
end