Packages
stellar_sdk
0.11.2
0.23.0
0.22.0
0.21.2
0.21.1
0.21.0
0.20.0
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Elixir SDK for the Stellar network.
Current section
Files
Jump to
Current section
Files
lib/tx_build/ledger/trustline.ex
defmodule Stellar.TxBuild.Ledger.Trustline do
@moduledoc """
Ledger `Trustline` struct definition.
"""
alias StellarBase.XDR.TrustLine
alias Stellar.TxBuild.{AccountID, TrustlineAsset}
@behaviour Stellar.TxBuild.XDR
@type account_id :: String.t()
@type asset :: atom() | Keyword.t()
@type validation :: {:ok, any()} | {:error, atom()}
@type t :: %__MODULE__{account_id: AccountID.t(), asset: TrustlineAsset.t()}
defstruct [:account_id, :asset]
@impl true
def new(args, opts \\ [])
def new(args, _opts) do
account_id = Keyword.get(args, :account_id)
asset = Keyword.get(args, :asset)
with {:ok, account_id} <- validate_account(account_id),
{:ok, asset} <- validate_trustline_asset(asset) do
%__MODULE__{account_id: account_id, asset: asset}
end
end
@impl true
def to_xdr(%__MODULE__{account_id: account_id, asset: asset}) do
trustline = TrustlineAsset.to_xdr(asset)
account_id
|> AccountID.to_xdr()
|> TrustLine.new(trustline)
end
@spec validate_account(account_id :: account_id()) :: validation()
defp validate_account(account_id) do
case AccountID.new(account_id) do
%AccountID{} = account_id -> {:ok, account_id}
_error -> {:error, :invalid_account}
end
end
@spec validate_trustline_asset(asset :: asset()) :: validation()
defp validate_trustline_asset(asset) do
case TrustlineAsset.new(asset) do
%TrustlineAsset{} = trustline_asset -> {:ok, trustline_asset}
_error -> {:error, :invalid_asset}
end
end
end