lib/windog/structs/race.ex

defmodule Windog.Structs.Race do
  @keys [
    :id,
    :r,
    :day_index,
    :day,
    :start_at,
    :close_at,
    :type,
    :class,
    :distance,
    :lap,
    :date,
    :cup_id,
    :labels,
    :grade
  ]

  @enforce_keys @keys

  defstruct @keys

  def validate(%{
        id: id,
        date: %DateTime{} = date,
        r: r,
        day_index: day_index,
        day: day,
        start_at: start_at,
        close_at: close_at,
        type: type,
        class: class,
        distance: distance,
        lap: lap,
        cup_id: cup_id,
        labels: labels,
        grade: grade
      })
      when is_binary(id) and is_integer(r) and is_integer(day) and is_binary(type) and
             is_binary(class) and is_integer(distance) and is_integer(lap) and
             is_integer(day_index) and is_integer(start_at) and is_integer(close_at) and
             is_binary(cup_id) and is_number(grade) and is_list(labels) do
    %__MODULE__{
      id: id,
      date: date,
      r: r,
      day_index: day_index,
      day: day,
      start_at: start_at,
      close_at: close_at,
      type: type,
      class: class,
      distance: distance,
      lap: lap,
      cup_id: cup_id,
      labels: labels,
      grade: grade
    }
  end
end