lib/schemas/release.ex

defmodule GitHub.Release do
  @moduledoc """
  Provides struct and type for Release
  """
  use GitHub.Encoder

  @type t :: %__MODULE__{
          __info__: map,
          assets: [GitHub.Release.Asset.t()],
          assets_url: String.t(),
          author: GitHub.User.simple(),
          body: String.t() | nil,
          body_html: String.t() | nil,
          body_text: String.t() | nil,
          created_at: String.t(),
          discussion_url: String.t() | nil,
          draft: boolean,
          html_url: String.t(),
          id: integer,
          mentions_count: integer | nil,
          name: String.t() | nil,
          node_id: String.t(),
          prerelease: boolean,
          published_at: String.t() | nil,
          reactions: GitHub.Reaction.Rollup.t() | nil,
          tag_name: String.t(),
          tarball_url: String.t() | nil,
          target_commitish: String.t(),
          upload_url: String.t(),
          url: String.t(),
          zipball_url: String.t() | nil
        }

  defstruct [
    :__info__,
    :assets,
    :assets_url,
    :author,
    :body,
    :body_html,
    :body_text,
    :created_at,
    :discussion_url,
    :draft,
    :html_url,
    :id,
    :mentions_count,
    :name,
    :node_id,
    :prerelease,
    :published_at,
    :reactions,
    :tag_name,
    :tarball_url,
    :target_commitish,
    :upload_url,
    :url,
    :zipball_url
  ]

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

  def __fields__(:t) do
    [
      assets: {:array, {GitHub.Release.Asset, :t}},
      assets_url: :string,
      author: {GitHub.User, :simple},
      body: {:nullable, :string},
      body_html: :string,
      body_text: :string,
      created_at: :string,
      discussion_url: :string,
      draft: :boolean,
      html_url: :string,
      id: :integer,
      mentions_count: :integer,
      name: {:nullable, :string},
      node_id: :string,
      prerelease: :boolean,
      published_at: {:nullable, :string},
      reactions: {GitHub.Reaction.Rollup, :t},
      tag_name: :string,
      tarball_url: {:nullable, :string},
      target_commitish: :string,
      upload_url: :string,
      url: :string,
      zipball_url: {:nullable, :string}
    ]
  end
end