Current section

Files

Jump to
gtempo src tempo.erl
Raw

src/tempo.erl

-module(tempo).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([accept_imprecision/1, error_on_imprecision/1, now_utc/0]).
-export_type([error/0, naive_date_time/0, date_time/0, offset/0, date/0, period/0, time/0, duration/0, uncertain_conversion/1, month/0]).
-type error() :: time_invalid_format |
time_out_of_bounds |
date_invalid_format |
date_out_of_bounds |
month_invalid_format |
month_out_of_bounds |
offset_invalid_format |
offset_out_of_bounds |
naive_date_time_invalid_format |
date_time_invalid_format.
-type naive_date_time() :: {naive_date_time, date(), time()}.
-type date_time() :: {date_time, naive_date_time(), offset()}.
-type offset() :: {offset, integer()}.
-type date() :: {date, integer(), month(), integer()}.
-type period() :: {naive_period, naive_date_time(), naive_date_time()} |
{period, date_time(), date_time()}.
-type time() :: {time, integer(), integer(), integer(), integer()} |
{time_milli, integer(), integer(), integer(), integer()} |
{time_micro, integer(), integer(), integer(), integer()} |
{time_nano, integer(), integer(), integer(), integer()}.
-type duration() :: {duration, integer()}.
-type uncertain_conversion(FSI) :: {precise, FSI} | {imprecise, FSI}.
-type month() :: jan |
feb |
mar |
apr |
may |
jun |
jul |
aug |
sep |
oct |
nov |
dec.
-spec accept_imprecision(uncertain_conversion(FSJ)) -> FSJ.
accept_imprecision(Conv) ->
case Conv of
{precise, A} ->
A;
{imprecise, A@1} ->
A@1
end.
-spec error_on_imprecision(uncertain_conversion(FSL)) -> {ok, FSL} |
{error, nil}.
error_on_imprecision(Conv) ->
case Conv of
{precise, A} ->
{ok, A};
{imprecise, _} ->
{error, nil}
end.
-spec now_utc() -> integer().
now_utc() ->
tempo_ffi:now().