defmodule Stellar.TxBuild.PoolID do @moduledoc """ `PoolID` struct definition. """ alias StellarBase.XDR.PoolID @behaviour Stellar.TxBuild.XDR @type pool_id :: String.t() @type t :: %__MODULE__{pool_id: pool_id()} defstruct [:pool_id] @impl true def new(pool_id, opts \\ []) def new(pool_id, _opts) when is_bitstring(pool_id) and byte_size(pool_id) == 64 do %__MODULE__{pool_id: pool_id} end def new(_pool_id, _opts), do: {:error, :invalid_pool_id} @impl true def to_xdr(%__MODULE__{pool_id: pool_id}) do pool_id |> String.upcase() |> Base.decode16!() |> PoolID.new() end end