Current section

Files

Jump to
ecto_hlclock lib ecto_hlclock.ex
Raw

lib/ecto_hlclock.ex

defmodule EctoHLClock do
@moduledoc """
Provides capability for storing HLC's in the database
"""
@behaviour Ecto.Type
alias HLClock.Timestamp
@impl Ecto.Type
def type, do: :binary
@impl Ecto.Type
def cast(t) when is_binary(t), do: {:ok, Timestamp.decode(t)}
def cast(%Timestamp{} = t), do: {:ok, t}
def cast(_), do: :error
@impl Ecto.Type
def load(bin), do: {:ok, Timestamp.decode(bin)}
@impl Ecto.Type
def dump(%Timestamp{} = t), do: {:ok, Timestamp.encode(t)}
def dump(_), do: :error
@impl Ecto.Type
def equal?(%Timestamp{} = t1, %Timestamp{} = t2),
do: Timestamp.compare(t1, t2) == :eq
def equal?(t1, t2) when is_binary(t1) and is_binary(t2), do: t1 == t2
def equal?(nil, nil), do: true
def equal?(_, _), do: false
@impl Ecto.Type
def embed_as(_t), do: :self
end