lib/schemas/classroom/assignment.ex

defmodule GitHub.Classroom.Assignment do
  @moduledoc """
  Provides struct and types for a Classroom.Assignment
  """
  use GitHub.Encoder

  @type simple :: %__MODULE__{
          __info__: map,
          accepted: integer,
          classroom: GitHub.Classroom.simple(),
          deadline: DateTime.t() | nil,
          editor: String.t(),
          feedback_pull_requests_enabled: boolean,
          id: integer,
          invitations_enabled: boolean,
          invite_link: String.t(),
          language: String.t(),
          max_members: integer | nil,
          max_teams: integer | nil,
          passing: integer,
          public_repo: boolean,
          slug: String.t(),
          students_are_repo_admins: boolean,
          submitted: integer,
          title: String.t(),
          type: String.t()
        }

  @type t :: %__MODULE__{
          __info__: map,
          accepted: integer,
          classroom: GitHub.Classroom.t(),
          deadline: DateTime.t() | nil,
          editor: String.t(),
          feedback_pull_requests_enabled: boolean,
          id: integer,
          invitations_enabled: boolean,
          invite_link: String.t(),
          language: String.t(),
          max_members: integer | nil,
          max_teams: integer | nil,
          passing: integer,
          public_repo: boolean,
          slug: String.t(),
          starter_code_repository: GitHub.Classroom.Repository.simple(),
          students_are_repo_admins: boolean,
          submitted: integer,
          title: String.t(),
          type: String.t()
        }

  defstruct [
    :__info__,
    :accepted,
    :classroom,
    :deadline,
    :editor,
    :feedback_pull_requests_enabled,
    :id,
    :invitations_enabled,
    :invite_link,
    :language,
    :max_members,
    :max_teams,
    :passing,
    :public_repo,
    :slug,
    :starter_code_repository,
    :students_are_repo_admins,
    :submitted,
    :title,
    :type
  ]

  @doc false
  @spec __fields__(atom) :: keyword
  def __fields__(type \\ :t)

  def __fields__(:simple) do
    [
      accepted: :integer,
      classroom: {GitHub.Classroom, :simple},
      deadline: {:union, [{:string, :date_time}, :null]},
      editor: {:string, :generic},
      feedback_pull_requests_enabled: :boolean,
      id: :integer,
      invitations_enabled: :boolean,
      invite_link: {:string, :generic},
      language: {:string, :generic},
      max_members: {:union, [:integer, :null]},
      max_teams: {:union, [:integer, :null]},
      passing: :integer,
      public_repo: :boolean,
      slug: {:string, :generic},
      students_are_repo_admins: :boolean,
      submitted: :integer,
      title: {:string, :generic},
      type: {:enum, ["individual", "group"]}
    ]
  end

  def __fields__(:t) do
    [
      accepted: :integer,
      classroom: {GitHub.Classroom, :t},
      deadline: {:union, [{:string, :date_time}, :null]},
      editor: {:string, :generic},
      feedback_pull_requests_enabled: :boolean,
      id: :integer,
      invitations_enabled: :boolean,
      invite_link: {:string, :generic},
      language: {:string, :generic},
      max_members: {:union, [:integer, :null]},
      max_teams: {:union, [:integer, :null]},
      passing: :integer,
      public_repo: :boolean,
      slug: {:string, :generic},
      starter_code_repository: {GitHub.Classroom.Repository, :simple},
      students_are_repo_admins: :boolean,
      submitted: :integer,
      title: {:string, :generic},
      type: {:enum, ["individual", "group"]}
    ]
  end
end