Current section

Files

Jump to
timex lib comparable ambiguous_datetime.ex
Raw

lib/comparable/ambiguous_datetime.ex

defimpl Timex.Comparable, for: Timex.AmbiguousDateTime do
alias Timex.Comparable
alias Timex.Convertable
alias Timex.DateTime
alias Timex.AmbiguousDateTime
@doc """
See docs for `Timex.compare/3`
"""
def compare(_, :distant_future, _granularity), do: -1
def compare(_, :distant_past, _granularity), do: 1
def compare(%AmbiguousDateTime{:after => a}, %AmbiguousDateTime{:after => b}, granularity) do
Comparable.compare(a, b, granularity)
end
def compare(a, b, granularity) do
case Convertable.to_datetime(b) do
{:error, _} = err ->
err
%DateTime{} ->
{:error, {:ambiguous_comparison, a}}
%AmbiguousDateTime{} = adt ->
compare(a, adt, granularity)
end
end
def diff(%AmbiguousDateTime{:after => a}, %AmbiguousDateTime{:after => b}, granularity) do
Comparable.diff(a, b, granularity)
end
def diff(a, b, granularity) do
case Convertable.to_datetime(b) do
{:error, _} = err -> err
%DateTime{} ->
{:error, {:ambiguous_comparison, a}}
%AmbiguousDateTime{} = adt ->
diff(a, adt, granularity)
end
end
end