///|
pub enum DateRangeError {
  Reversed
  OutOfRange
  NoIntersection
} derive(Debug, Eq, Compare)

///|
pub struct DateRange {
  start : Date
  end : Date
} derive(Debug, Eq, Compare)

///|
pub fn DateRange::closed(
  start~ : Date,
  end~ : Date,
) -> Result[DateRange, DateRangeError] {
  if start > end {
    Err(Reversed)
  } else {
    Ok({ start, end })
  }
}

///|
pub fn DateRange::single(date : Date) -> DateRange {
  { start: date, end: date }
}

///|
fn _date_range_out_of_range() -> DateRangeError {
  OutOfRange
}