-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_year/0, 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_year() :: {month_year, month(), integer()}. -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().