lib/xtb_client/messages/period.ex
defmodule XtbClient.Messages.Period do
@moduledoc """
Specifies time interval - counted in multiples of minute.
"""
@type t :: :m1 | :m5 | :m15 | :m30 | :h1 | :h4 | :d1 | :w1 | :mn1
@type minute_period :: 1 | 5 | 15 | 30 | 60 | 240 | 1440 | 10080 | 43200
@doc """
Formats period given as `Period` to number of minutes.
"""
@spec format(t()) :: minute_period()
def format(period) when is_atom(period) do
format_perod(period)
end
defp format_perod(period) do
case period do
:m1 -> 1
:m5 -> 5
:m15 -> 15
:m30 -> 30
:h1 -> 60
:h4 -> 240
:d1 -> 1440
:w1 -> 10080
:mn1 -> 43200
end
end
@doc """
Parses value given as number of minutes to `Period` atom type.
"""
@spec parse(minute_period()) :: t()
def parse(value) when is_number(value) and value > 0 do
parse_period(value)
end
defp parse_period(value) do
case value do
1 -> :m1
5 -> :m5
15 -> :m15
30 -> :m30
60 -> :h1
240 -> :h4
1440 -> :d1
10080 -> :w1
43200 -> :mn1
end
end
end