lib/history/range_job.ex

defprotocol History.RangeJob do
  @type t :: struct
  @type date_time_result ::
          {:ok, DateTime.t()}
          | {:ambiguous, first_datetime :: t(), second_datetime :: t()}
          | {:gap, t(), t()}
          | {:error,
             :incompatible_calendars
             | :time_zone_not_found
             | :utc_only_time_zone_database}

  @spec from(t) :: date_time_result
  def from(job)

  @spec to(t) :: date_time_result
  def to(job)

  @spec from!(t) :: DateTime.t()
  def from!(job)

  @spec to!(t) :: DateTime.t()
  def to!(job)
end