The Forex.Support module provides helper functions, for example, for
formatting the exchange rates values.
Summary
Functions
Conver the binary currency code to an existing atom representation.
Format the rate value based on the format option
Map the date to a Date struct
or nil if the date cannot be parsed.
Attempt to parse a date from a binary string in ISO 8601 format
Round the rate value based on the round option
Convert the currency code to a default string representation (uppercase string).
Functions
Conver the binary currency code to an existing atom representation.
Examples
iex> Forex.Support.atomize_code("usd")
:usd
iex> Forex.Support.atomize_code(:usd)
:usd
iex> Forex.Support.atomize_code("USD")
:usd
iex> Forex.Support.atomize_code(:USD)
:usd
iex> Forex.Support.atomize_code("uSD")
:usd
iex> Forex.Support.atomize_code(1)
** (FunctionClauseError) no function clause matching in Forex.Support.atomize_code/1
@spec format_value(number() | binary() | Decimal.t(), :string | :decimal) :: formatted_value :: binary() | Decimal.t()
Format the rate value based on the format option
Examples
iex> Forex.Support.format_value("1.2345", :string)
"1.2345"
iex> Forex.Support.format_value("1.2345", :decimal)
Decimal.new("1.2345")
iex> Forex.Support.format_value("1.2345", :decimal)
Decimal.new("1.2345")
iex> Forex.Support.format_value("1.2345", :string)
"1.2345"
iex> Forex.Support.format_value(1.2345, :decimal)
Decimal.new("1.2345")
iex> Forex.Support.format_value(1.2345, :string)
"1.2345"
iex> Forex.Support.format_value(Decimal.new("1.2345"), :decimal)
Decimal.new("1.2345")
iex> Forex.Support.format_value(Decimal.new("1.2345"), :string)
"1.2345"
iex> Forex.Support.format_value(1.2345, :number)
** (Forex.FormatError) Invalid format value: number
@spec map_date(parsable_date()) :: Date.t() | nil
Map the date to a Date struct
or nil if the date cannot be parsed.
Examples
iex> Forex.Support.map_date("2020-01-01")
~D[2020-01-01]
iex> Forex.Support.map_date("2020-01-01T00:00:00Z")
~D[2020-01-01]
iex> Forex.Support.map_date({1982, 2, 25})
~D[1982-02-25]
iex> Forex.Support.map_date(~D[2020-01-01])
~D[2020-01-01]
iex> Forex.Support.map_date(~U[2020-01-01T00:00:00Z])
~D[2020-01-01]
iex> Forex.Support.map_date("2020-01-01T00:00:00")
nil
iex> Forex.Support.map_date("1982-02-31T00:00:00Z")
nil
iex> Forex.Support.map_date(1982)
nil
@spec parse_date(parsable_date()) :: {:ok, Date.t()} | {:error, :invalid_date}
Attempt to parse a date from a binary string in ISO 8601 format
Examples
iex> Forex.Support.parse_date("2020-01-01")
{:ok, ~D[2020-01-01]}
iex> Forex.Support.parse_date("2020-01-01T00:00:00Z")
{:ok, ~D[2020-01-01]}
iex> Forex.Support.parse_date({1982, 2, 25})
{:ok, ~D[1982-02-25]}
iex> Forex.Support.parse_date(~D[2020-01-01])
{:ok, ~D[2020-01-01]}
iex> Forex.Support.parse_date(~U[2020-01-01T00:00:00Z])
{:ok, ~D[2020-01-01]}
iex> Forex.Support.parse_date("2020-01-01T00:00:00")
{:error, :invalid_date}
iex> Forex.Support.parse_date("1982-02-31T00:00:00Z")
{:error, :invalid_date}
iex> Forex.Support.parse_date(1982)
{:error, :invalid_date}
Round the rate value based on the round option
Examples
iex> Forex.Support.round_value(1.2345, 2)
1.23
iex> Forex.Support.round_value(1.2345, 4)
1.2345
iex> Forex.Support.round_value(1.2345, 0)
1.0
iex> Forex.Support.round_value(1.2345, 15)
1.2345
iex> Forex.Support.round_value(Decimal.new("1.2345"), 2)
Decimal.new("1.23")
iex> Forex.Support.round_value(Decimal.new("1.2345"), 4)
Decimal.new("1.2345")
iex> Forex.Support.round_value(Decimal.new("1.2345"), 0)
Decimal.new("1")
iex> Forex.Support.round_value("1.2345", 2)
"1.23"
iex> Forex.Support.round_value("1.2345", 4)
"1.2345"
iex> Forex.Support.round_value("1.2345", nil)
"1.2345"
iex> Forex.Support.round_value(nil, 2)
nil
iex> Forex.Support.round_value(1.2345, 16)
** (FunctionClauseError) no function clause matching in Forex.Support.round_value/2
Convert the currency code to a default string representation (uppercase string).
Examples
iex> Forex.Support.stringify_code(:usd)
"USD"
iex> Forex.Support.stringify_code("usd")
"USD"
iex> Forex.Support.stringify_code("USD")
"USD"
iex> Forex.Support.stringify_code(:USD)
"USD"
iex> Forex.Support.stringify_code(:usd)
"USD"
iex> Forex.Support.stringify_code("usd")
"USD"
iex> Forex.Support.stringify_code("USD")
"USD"
iex> Forex.Support.stringify_code(:USD)
"USD"
iex> Forex.Support.stringify_code(1)
** (FunctionClauseError) no function clause matching in Forex.Support.stringify_code/1