lib/schemas/repository/ruleset.ex

defmodule GitHub.Repository.Ruleset do
  @moduledoc """
  Provides struct and type for RepositoryRuleset
  """
  use GitHub.Encoder

  @type t :: %__MODULE__{
          __info__: map,
          _links: map | nil,
          bypass_actors: [GitHub.Repository.Ruleset.BypassActor.t()] | nil,
          conditions: (map | GitHub.Repository.Ruleset.Conditions.t()) | nil,
          created_at: String.t() | nil,
          current_user_can_bypass: String.t() | nil,
          enforcement: String.t(),
          id: integer,
          name: String.t(),
          node_id: String.t() | nil,
          rules:
            [
              GitHub.Repository.Rule.BranchNamePattern.t()
              | GitHub.Repository.Rule.CommitAuthorEmailPattern.t()
              | GitHub.Repository.Rule.CommitMessagePattern.t()
              | GitHub.Repository.Rule.CommitterEmailPattern.t()
              | GitHub.Repository.Rule.Creation.t()
              | GitHub.Repository.Rule.Deletion.t()
              | GitHub.Repository.Rule.NonFastForward.t()
              | GitHub.Repository.Rule.PullRequest.t()
              | GitHub.Repository.Rule.RequiredDeployments.t()
              | GitHub.Repository.Rule.RequiredLinearHistory.t()
              | GitHub.Repository.Rule.RequiredSignatures.t()
              | GitHub.Repository.Rule.RequiredStatusChecks.t()
              | GitHub.Repository.Rule.TagNamePattern.t()
              | GitHub.Repository.Rule.Update.t()
            ]
            | nil,
          source: String.t(),
          source_type: String.t() | nil,
          target: String.t() | nil,
          updated_at: String.t() | nil
        }

  defstruct [
    :__info__,
    :_links,
    :bypass_actors,
    :conditions,
    :created_at,
    :current_user_can_bypass,
    :enforcement,
    :id,
    :name,
    :node_id,
    :rules,
    :source,
    :source_type,
    :target,
    :updated_at
  ]

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

  def __fields__(:t) do
    [
      _links: :map,
      bypass_actors: {:array, {GitHub.Repository.Ruleset.BypassActor, :t}},
      conditions: {:union, [{GitHub.Repository.Ruleset.Conditions, :t}, :map]},
      created_at: :string,
      current_user_can_bypass: :string,
      enforcement: :string,
      id: :integer,
      name: :string,
      node_id: :string,
      rules:
        {:array,
         {:union,
          [
            {GitHub.Repository.Rule.Creation, :t},
            {GitHub.Repository.Rule.Update, :t},
            {GitHub.Repository.Rule.Deletion, :t},
            {GitHub.Repository.Rule.RequiredLinearHistory, :t},
            {GitHub.Repository.Rule.RequiredDeployments, :t},
            {GitHub.Repository.Rule.RequiredSignatures, :t},
            {GitHub.Repository.Rule.PullRequest, :t},
            {GitHub.Repository.Rule.RequiredStatusChecks, :t},
            {GitHub.Repository.Rule.NonFastForward, :t},
            {GitHub.Repository.Rule.CommitMessagePattern, :t},
            {GitHub.Repository.Rule.CommitAuthorEmailPattern, :t},
            {GitHub.Repository.Rule.CommitterEmailPattern, :t},
            {GitHub.Repository.Rule.BranchNamePattern, :t},
            {GitHub.Repository.Rule.TagNamePattern, :t}
          ]}},
      source: :string,
      source_type: :string,
      target: :string,
      updated_at: :string
    ]
  end
end