lib/tx_build/ledger/liquidity_pool.ex

defmodule Stellar.TxBuild.Ledger.LiquidityPool do
  @moduledoc """
  Ledger `LiquidityPool` struct definition.
  """
  alias StellarBase.XDR.LiquidityPool
  alias Stellar.TxBuild.PoolID

  @behaviour Stellar.TxBuild.XDR

  @type t :: %__MODULE__{liquidity_pool_id: PoolID.t()}

  defstruct [:liquidity_pool_id]

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

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

  @impl true
  def to_xdr(%__MODULE__{liquidity_pool_id: liquidity_pool_id}) do
    liquidity_pool_id
    |> PoolID.to_xdr()
    |> LiquidityPool.new()
  end
end