Packages
stellar_sdk
0.22.0
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/amount.ex
defmodule Stellar.TxBuild.Amount do
@moduledoc """
`Amount` struct definition.
"""
alias StellarBase.XDR.Int64
@behaviour Stellar.TxBuild.XDR
@unit 10_000_000
@max_size 9_223_372_036_854_775_807
@type amount :: non_neg_integer() | float()
@type t :: %__MODULE__{amount: amount(), raw: non_neg_integer()}
defstruct [:amount, :raw]
@impl true
def new(amount, opts \\ [])
def new(:max, _opts) do
%__MODULE__{amount: @max_size / @unit, raw: @max_size}
end
def new(amount, _opts) when is_number(amount) and amount >= 0 and amount <= @max_size do
%__MODULE__{amount: amount, raw: trunc(amount * @unit)}
end
def new(_amount, _opts), do: {:error, :invalid_amount}
@impl true
def to_xdr(%__MODULE__{raw: raw}) do
Int64.new(raw)
end
end