=begin pod

=head1 NAME

JSON::RepositoryEvent - representation of a repository event

=head1 SYNOPSIS

=begin code :lang<raku>
use JSON::RepositoryEvent;
my $io = "foo.json".IO;

# create from incoming request
my $new = JSON::RepositoryEvent.new(%data, request);
$io.spurt(to-json($new));

# create from existing file
my $saved = JSON::RepositoryEvent.new($io.slurp);
=end code

=head1 DESCRIPTION

The C<JSON::RepositoryEvent> provides a distribution for mapping
repository related events in JSON format (such as typically provided
by collaborative services such as GitHub / Codeberg in a webhook)
into Raku classes with an object oriented interface.

All classes can be instantiated with the C<.new> method and providing
a correctly structured C<Map> (or C<Hash>).  This is specifically
needed when processing JSON-files that have been previously saved
with the L<C<JSON::Webhook>|https://raku.land/zef:lizmat/JSON::Webhook>
module.

=head1 CREATION FROM A WEBHOOK

The C<JSON::RepositoryEvent> object can (also) be created using the
information that is available inside a C<Cro::HTTP::Router> route.

=begin code :lang<raku>
# create from incoming request
my $new = JSON::RepositoryEvent.new(%data, request);
=end code

The first argument is the data structure (usually a C<Map> or a
C<Hash>, the second argument is the C<Cro::HTTP::Request> object
which contains all of the information needed.

Using the L<C<JSON::Webhook>|https://raku.land/zef:lizmat/JSON::Webhook>
this can be as simple as:

=begin code :lang<raku>
sub processor(\data, \request) {
    JSON::RepositoryEvent.new(data, request)
}
JSON::Webhook.new(:&processor);
=end code

=head1 JSON::RepositoryEvent

The C<JSON::RepositoryEvent> class wraps the data from a request
in the C<payload> accessor: this then contains an instances of
any of the other C<JSON::RepositoryEvent::xxx> classes.

=head2 METHODS

=item class - the type-object of the type of the payload
=item created-at - DateTime or Nil
=item headers - "key: value" of each header in the request
=item irc - list of IRC channels (named argument "irc" in request)
=item nameds - named arguments in query
=item payload - data blessed as a JSON::RepositoryEvent::xxx class

=head1 STATUS

This is still very much in alpha state.  Quite a number of payloads
from GitHub have been implemented, not so many from Forgejo yet.
Help in implementing this is very much welcomed.

=head1 NAMING LOGIC

The data structures in the GitHub and Forgejo (e.g. Codeberg) API's
typically use underscores in their names.  No underscores are used
in the Raku classes.  If a name is mapped to a class, then an
underscore created camelcase class names.  So "pull_request" becomes
C<PullRequest> as a class name.  Other fields that have an underscore
map the underscores to hyphens, so "created_at" as the name of a field
in the data structure, becomes "created-at" as an accessor (method
name).

Some exceptions: field names that start with an underscore are used
verbatim in method names (as methods starting with a hyphen are illegal
in Raku).  If a field name starts with C<+>, it is replaced by the
string "plus" in the method name.  If a field name starts with C<->,
it is replaces by the string "minus" in the method name.

=head1 THEORY OF OPERATION

The underlying data structure is always a C<Map> (or a C<Hash>).
All classes are subclasses of C<Map>, so all the functionality that
you can expect from a C<Map> can be used on any of the classes in
this distribution.

All classes could be considered to be "views" on the underlying data
structure: all "accessors" are in fact accessing certain parts of
that data structure by key.  This approach allows for fast loading:
only actual parts of the data structure that need to be accessed,
will be fetched on demand.

=head1 GITHUB EVENT CLASSES

The full name of these classes is C<JSON::RepositoryEvent::GitHub::Eventxxx>.
The C<JSON::RepositoryEvent> part is not mentioned here in the
documentation for convenience.

=head2 GitHub::EventCheckRun

=item action - action performed
=item check-run - see GitHub::CheckRun::CheckRun
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventCheckSuite

=item action - action performed
=item check-suite - see GitHub::CheckSuite::CheckSuite
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventCommitComment

=item action
=item comment - see GitHub::Comment
=item created-at - DateTime
=item organization - see GitHub::Organization
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item updated-at - DateTime

=item GitHub::EventCreate

=item description
=item master-branch
=item pusher-type
=item ref
=item ref-type
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventDelete

=item organization - see GitHub::Organization
=item pusher-type
=item ref
=item ref-type
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventFork

=item forkee - see GitHub::Repository
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventGollum

=item organization - see GitHub::Organization
=item pages - List of GitHub::Page
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventIssueComment

=item action - the action performed on an issue comment
=item comment - see GitHub::Comment
=item created-at - DateTime
=item issue - see GitHub::Issue
=item organization - see GitHub::Organization
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item updated-at - DateTime

=head2 GitHub::EventIssues

=item action - the action performed on an issue
=item issue - see GitHub::Issue
=item repository - see Forgejo::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventLabel

=item action - the action performed on a label
=item label - see GitHub::Label::Label
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventPing

=item hook - see GitHub::Hook
=item hook-id
=item last-response - see GitHub::Response
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item zen - random string of GitHub zen

=head2 GitHub::EventPublic

=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventPullRequest

=item action - action performed
=item organization - see GitHub::Organization
=item number - pull request number
=item pull-request - see GitHub::PullRequest
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventPullRequestComment

=item action - the action performed on a Pull Request comment
=item comment - see GitHub::Comment
=item created-at - DateTime
=item organization - see GitHub::Organization
=item pull-request - see GitHub::PullRequest
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item updated-at - DateTime

=head2 GitHub::EventPullRequestReview

=item action - the action performed on a Pull Request review
=item organization - see GitHub::Organization
=item pull-request - see GitHub::PullRequest
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 EventPullRequestReviewComment

=item comment - see GitHub::PullRequestComment
=item organization - see GitHub::Organization
=item pull-request - see GitHub::PullRequest
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 EventPullRequestReviewThread

=item action - the action performed on a Pull Request comment review thread
=item organization - see GitHub::Organization
=item pull-request - see GitHub::PullRequest
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item thread - see GitHub::PullRequestCommentThread

=head2 GitHub::EventPush

=item after - SHA of previous commit
=item base-ref - SHA of base reference
=item before - SHA of next commit
=item commits - list of one or more GitHub::PushCommit object
=item compare - compare URL
=item created - list of files created
=item deleted - list of files deleted
=item forced - was the push forced?
=item ref - SHA of reference
=item head-commit - see GitHub::PushCommit
=item pusher - see GitHub::Person
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventRelease

=item action - the action performed on a release
=item organization - see GitHub::Organization
=item release - see GitHub::Release
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventRepository

=item action - the action performed on a repository
=item repository - See GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventStar

=item action - the action performed on the star
=item repository - See GitHub::Repository
=item sender - see GitHub::Actor
=item starred-at - DateTime

=head2 GitHub::EventStatus

=item avatar-url
=item brances - List
=item commit - see GitHub::TreeCommit
=item context
=item created-at - DateTime
=item description
=item id
=item name
=item organization - see GitHub::Organization
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item sha
=item state
=item target-url
=item updated-at - DateTime

=head2 GitHub::EventWatch

=item action - the action performed related to watchers
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor

=head2 GitHub::EventWorkflowJob

=item action - action performed
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item workflow - see GitHub::Workflow
=item workflow-job - see GitHub::WorkflowJob::WorkflowJob

=head2 GitHub::EventWorkflowRun

=item action - action performed
=item repository - see GitHub::Repository
=item sender - see GitHub::Actor
=item workflow - see GitHub::Workflow
=item workflow-run - see GitHub::WorkflowRun::WorkflowRun

=head1 GITHUB CLASSES

These classes represent (common) parts of the actual payload classes
for GitHub events.  The C<JSON::RepositoryEvent> part is not mentioned
here in the documentation for convenience.

=head2 GitHub::Actor

=item avatar-url
=item email
=item events-url
=item followers-url
=item following-url
=item gists-url
=item gravatar-id
=item html-url
=item id
=item login
=item name
=item node-id
=item organizations-url
=item received-events-url
=item repos-url
=item site-admin
=item starred-url
=item subscriptions-url
=item type
=item url
=item user-view-type

=head2 GitHub::App

=item client-id
=item created-at - DateTime
=item description
=item events - List
=item external-url
=item html-url
=item id
=item name
=item node-id
=item owner - see GitHub::Actor
=item permissions - see GitHub::Permissions
=item slug
=item updated-at - DateTime

=head2 GitHub::Asset

=item browser-download-url
=item content-type
=item created-at - DateTime
=item digest
=item download-count
=item id
=item label
=item name
=item node-id
=item size
=item state
=item updated-at - DateTime
=item uploader - see GitHub::Actor
=item url

=head2 GitHub::CheckRun

=item app - see GitHub::App
=item completed-at - DateTime
=item check-suite - see GitHub::CheckSuite
=item conclusion
=item details-url
=item external-id
=item head-sha
=item html-url
=item id
=item name
=item node-id
=item output - see GitHub::Output
=item pull-requests - List
=item started-at - DateTime
=item status
=item url

=head2 GitHub::CheckSuite

=item app - see GitHub::App
=item after
=item before
=item check-runs-url
=item conclusion
=item created-at - DateTime
=item head-branch
=item head-commit - see GitHub::PushCommit
=item head-sha
=item id
=item latest-check-runs-count
=item node-id
=item pull-requests - List
=item rerequestable
=item runs-rerequestable
=item status
=item updated-at - DateTime
=item url

=head2 GitHub::Comment

=item author-association
=item body
=item commit-id
=item created-at - DateTime
=item html-url
=item id
=item line
=item node-id
=item path
=item position
=item reactions - see GitHub::Reactions
=item updated-at - DateTime
=item user - see GitHub::Actor

=head2 GitHub::Commit

=item author - see GitHub::Actor
=item comments-url
=item commit - see GitHub::PushCommit
=item committer - see GitHub::Actor
=item html-url
=item node-id
=item parents - see GitHub::Tree
=item sha
=item url

=head2 GitHub::DependenciesSummary

=item blocked-by
=item blocking
=item total-blocked-by
=item total-blocking

=head2 GitHub::Hook

=item active
=item created-at
=item deliveries-url
=item name
=item ping-url
=item test-url
=item type
=item updated-at
=item url

=head2 GitHub::HookConfig

=item content-type
=item insecure-ssl
=item url

=head2 GitHub::Issue

=item active-lock-reason
=item assignee - see GitHub::Actor
=item assignees - List
=item author-association
=item body
=item closed-at - DateTime
=item comments
=item comments-url
=item created-at - DateTime
=item events-url
=item html-url
=item id
=item issue-dependendencies-summary - see GitHub::DependenciesSummary
=item issue-field-values - List
=item labels - List
=item labels-url
=item locked
=item milestone
=item node-id
=item number
=item performed-via-github-app
=item pinned-comment
=item reactions - see GitHub::Reactions
=item repository-url
=item state
=item state-reason
=item timeline-url
=item updated-at - DateTime
=item url
=item user - see GitHub::Actor

=head2 GitHub::Label

=item color
=item default
=item description
=item id
=item name
=item node-id
=item url

=head2 GitHub::License

=item key
=item name
=item node-id
=item spdx-id
=item url

=head2 GitHub::Link

=item href

=head2 GitHub::Organization

=item avatar_url
=item description
=item events-url
=item hooks-url
=item id
=item issues-url
=item login
=item members-url
=item node-id
=item public-members-url
=item repos-url
=item url

=head2 GitHub::Output

=item annotations-count
=item annotations-url
=item summary
=item text
=item title

=head2 GitHub::Page

Description of a change made to a page in the wiki.

=item action
=item html-url
=item page-name
=item sha
=item summary
=item title

=head2 GitHub::Permissions

=item actions
=item administration
=item artifact-metadata
=item attestations
=item checks
=item code-quality
=item contents
=item copilot-requests
=item deployments
=item discussions
=item drives
=item issues
=item merge-queues
=item metadata
=item models
=item packages
=item pages
=item pull-requests
=item repository-hooks
=item repository-projects
=item security-events
=item statuses
=item vulnerabity-alerts

=head2 GitHub::Person

=item date - DateTime
=item email
=item name
=item username

=head2 GitHub::PullRequest

=item _links - List of GitHub::Link
=item active-lock-reason
=item additions
=item assignee
=item assignees - List
=item author-association
=item auto-merge
=item base - see GitHub::State
=item body
=item changed-files
=item closed-at - DateTime
=item comments
=item comments-url
=item commits - List of GitHub::Commit
=item commits-url
=item created-at - DateTime
=item deletions
=item diff-url
=item draft
=item head - see GitHub::State
=item html-url
=item id
=item issue-url
=item labels - List
=item locked
=item maintainer-can-modify
=item merge-commit-sha
=item merged-at - DateTime
=item merged-by - see GitHub::Actor
=item mergeable
=item mergeable-state
=item merged
=item milestone
=item node-id
=item number
=item patch-url
=item rebaseable
=item repository - see GitHub::Repository
=item requested-reviewers - List
=item requested-teams - List
=item review-comment-url
=item review-comments
=item review-comments-url
=item sender - see GitHub::Actor
=item state
=item statuses-url
=item title
=item updated-at - DateTime
=item url
=item user - see GitHub::Actor

=head2 GitHub::PullRequestComment

=item _links - List of GitHub::Link
=item author-association
=item body
=item commit-id
=item created-at - DateTime
=item diff-hunk
=item html-url
=item id
=item in-reply-to-id
=item line
=item node-id
=item orginal-commit-id
=item original-line
=item original-position
=item original-start-line
=item path
=item position
=item pull-request-review-id
=item pull-request-url
=item reactions - see GitHub::Reactions
=item side
=item start-line
=item start-side
=item subject-type
=item updated-at - DateTime
=item url
=item user - see GitHub::Actor

=head2 PullRequestCommentThread

=item comments - List of PullRequestComment
=item node-id

=head2 GitHub::PushCommit

=item added - List
=item author - see GitHub::Person
=item committer - see GitHub::Person
=item distinct
=item id
=item message
=item modified - List
=item removed - List
=item tree-id
=item timestamp - DateTime
=item url

=head2 GitHub::Reactions

=item confused
=item eyes
=item heart
=item hooray
=item laugh
=item plus1
=item minus1
=item rocket
=item total-count
=item url

=head2 GitHub::Review

=item _links - List of GitHub::Link
=item author-association
=item body
=item commit-id
=item html-url
=item id
=item node-id
=item pull-request-url
=item state
=item submitted-at
=item updated-at

=head2 GitHub::Release

=item assets - List of GitHub::Asset
=item assets-url
=item author - see GitHub::Actor
=item body
=item created-at - DateTime
=item draft
=item html-url
=item id
=item immutable
=item name
=item node-id
=item published-at - DateTime
=item tag-name
=item tarball-url
=item target-commitish
=item updated-at - DateTime
=item upload-url
=item url
=item zipball-url

=head2 GitHub::Repository

=item allow-forking
=item archive-url
=item archived
=item assignees-url
=item blobs-url
=item branches-url
=item clone-url
=item collaborators-url
=item comments-url
=item commits-url
=item compare-url
=item contents-url
=item contributors-url
=item created-at - DateTime
=item default-branch
=item deployment-url
=item description
=item disabled
=item downloads-url
=item events-url
=item fork
=item forks
=item forks-count
=item forks-url
=item full-name
=item git-commits-url
=item git-refs-url
=item git-tags-url
=item git-url
=item has-discussions
=item has-downloads
=item has-issues
=item has-pages
=item has-projects
=item has-pull-requests
=item has-wiki
=item homepage
=item hooks-url
=item html-url
=item id
=item is-template
=item issue-comment-url
=item issue-events-url
=item issues-url
=item keys-url
=item labels-url
=item language
=item languages-url
=item license - see GitHub::License
=item master-branch
=item merges-url
=item milestones-url
=item mirror-url
=item name
=item node-id
=item notifications-url
=item open-issues
=item open-issues-count
=item owner - see GitHub::Actor
=item private
=item pull-request-creation-policy
=item pulls-url
=item pushed-at - DateTime
=item releases-url
=item size
=item ssh-url
=item stargazers
=item stargazers-count
=item stargazers-url
=item statuses-url
=item subscribers-url
=item subscription-url
=item svn-url
=item tags-url
=item teams-url
=item topics - List
=item trees-url
=item updated-at - DateTime
=item visibility
=item watchers
=item watchers-count
=item web-commit-signoff-required

=head2 GitHub::Response

=item code
=item message
=item status

=head2 GitHub::State

=item label
=item ref
=item repo - see GitHub::Repository
=item sha
=item user - see GitHub::Actor

=head2 GitHub::SubIssuesSummary

=item complete
=item percent-completed
=item total

=head2 GitHub::Tree

=item html-url
=item sha
=item url

=head2 GitHub::TreeCommit

=item author - see GitHub::Actor
=item committer - see GitHub::Actor
=item comment-count
=item message
=item tree - see GitHub::Tree
=item url
=item verification - see GitHub::Verification

=head2 GitHub::Verification

=item payload
=item reason
=item signature
=item verified
=item verified-at - DateTime

=head2 GitHub::Workflow

=item badge-url
=item created-at - DateTime
=item html-url
=item id
=item name
=item node-id
=item path
=item state
=item updated-at - DateTime
=item url

=head2 GitHub::WorkflowJob

=item check-run-url
=item completed-at - DateTime
=item conclusion
=item created-at - DateTime
=item head-branch
=item head-sha
=item html-url
=item id
=item labels - List
=item name
=item node-id
=item run-attempt
=item run-id
=item run-url
=item runner-group-id
=item runner-group-name
=item runner-id
=item runner-name
=item started-at - DateTime
=item status
=item steps - List, see GitHub::WorkflowJob::Step
=item url
=item workflow-name

=head2 GitHub::WorkflowRun

=item actor - see GitHub::Actor
=item artifacts-url
=item cancel-url
=item check-suite-id
=item check-suite-node-id
=item check-suite-url
=item conclusion
=item created-at - DateTime
=item display-title
=item event
=item head-branch
=item head-commit - see GitHub::PushCommit
=item head-sha
=item html-url
=item id
=item jobs-url
=item logs-url
=item name
=item node-id
=item path
=item previous-attempt-url
=item pull-requests -List
=item references-workflows -List
=item repository - see GitHub::Repository
=item rerun-url
=item run-attempt
=item run-number
=item run-started-at - DateTime
=item status
=item triggering-actor - see GitHub::Actor
=item updated-at - DateTime
=item url
=item workflow-id
=item workflow-url

=head1 FORGEJO EVENTS CLASSES

The full name of these classes is C<JSON::RepositoryEvent::Forgejo::Eventxxx>.
The C<JSON::RepositoryEvent> part is not mentioned here in the
documentation for convenience.

=head2 Forgejo::EventCreate

=item ref
=item ref-type
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor
=item sha

=head2 Forgejo::EventDelete

=item pusher-type
=item ref
=item ref-type
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor

=head2 Forgejo::EventFork

=item forkee - see Forgejo::Repository
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor

=head2 Forgejo::EventIssueComment

=item action - the action performed on an issue comment
=item comment - see Forgejo::Comment
=item created-at - DateTime
=item issue - see Forgejo::Issue
=item organization - see Forgejo::Organization
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor
=item updated-at - DateTime

=head2 Forgejo::EventIssues

=item action - the action performed on an issue
=item commit-id - SHA of associated commit
=item issue - see Forgejo::Issue
=item number - the issue number
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor

=head2 Forgejo::EventPullRequest

=item action - action performed
=item organization - see Forgejo::Organization
=item number - pull request number
=item pull-request - see Forgejo::PullRequest
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor

=head2 Forgejo::EventPullRequestComment

=item action - the action performed on a Pull Request comment
=item comment - see Forgejo::Comment
=item created-at - DateTime
=item organization - see Forgejo::Organization
=item pull-request - see Forgejo::PullRequest
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor
=item updated-at - DateTime

=head2 Forgejo::EventPush

=item after - SHA of previous commit
=item before - SHA of next commit
=item commits - List of Forgejo::Commit
=item compare-url - compare URL
=item head-commit - see Forgejo::Commit
=item pusher - see Forgejo::Actor
=item ref - SHA of reference
=item repository - see Forgejo::Repository
=item sender - see Forgejo::Actor
=item total-commits - number of commits in this push

=head1 FORGEJO CLASSES

These classes represent (common) parts of the actual payload classes
for Forgejo (Codeberg) events.  The C<JSON::RepositoryEvent> part is
not mentioned here in the documentation for convenience.

=head2 Forgejo::Actor

=item active
=item avatar-url
=item created - DateTime
=item description
=item email
=item followers-count
=item following-count
=item full-name
=item html-url
=item id
=item is-admin
=item language
=item last-login - DateTime
=item location
=item login
=item login-name
=item prohibit-login
=item pronouns
=item restricted
=item source-id
=item starred-repos-count
=item username
=item visibility
=item website

=head2 Forgejo::Commit

=item added - List
=item author - see Forgejo::Person
=item committer - see Forgejo::Person
=item id
=item message
=item modified - List
=item removed - List
=item timestamp - DateTime
=item url
=item verification

=head2 Forgejo::Issue

=item assets - List
=item assignee - see Forgejo::Actor
=item assignees - List of Forgejo::Actor
=item body
=item closed-at - DateTime
=item created-at - DateTime
=item comments
=item due-date
=item html-url
=item id
=item is-locked
=item labels - List
=item milestone
=item number
=item original-author
=item original-author-id
=item pin-orer
=item pull-request
=item ref
=item state
=item title
=item updated-at - DateTime
=item url

=head2 Forgejo::Permissions

=item admin
=item pull
=item push

=head2 Forgejo::Person

=item email
=item name
=item username

=head2 Forgejo::PullRequest

=item additions
=item allow-maintainer-edit
=item assignee
=item assignees - List
=item base - see Forgejo::State
=item body
=item changed-files
=item closed-at - DateTime
=item comments
=item created-at - DateTime
=item deletions
=item diff-url
=item draft
=item head - see GitHub::State
=item html-url
=item id
=item issue-url
=item is-locked
=item labels - List
=item merge-commit-sha
=item merged-at - DateTime
=item merged-by - see GitHub::Actor
=item mergeable
=item merged
=item milestone
=item number
=item patch-url
=item pin-order
=item rebaseable
=item repository - see GitHub::Repository
=item requested-reviewers - List
=item requested-teams - List
=item review-comments
=item state
=item title
=item updated-at - DateTime

=head2 Forgejo::Repository

=item allow-fast-forward-only-merge
=item allow-merge-commits
=item allow-rebase
=item allow-rebase-explicit
=item allow-rebase-update
=item allow-squash-merge
=item archived
=item archived-at - DateTime
=item avatar-url
=item clone-url
=item created-at - DateTime
=item default-allow-maintainer-edit
=item default-branch
=item default-delete-branch-after-merge
=item default-merge-style
=item default-update-style
=item description
=item empty
=item fork
=item forks-count
=item full-name
=item globally-editable-wiki
=item has-actions
=item has-issues
=item has-projects
=item has-pull-requests
=item has-releases
=item has-wiki
=item has-wiki-contents
=item html-url
=item id
=item ignore_whitespace_conflicts
=item internal
=item internal-tracker - see Forgejo::Tracker
=item language
=item languages-url
=item link
=item mirror
=item mirror-interval
=item mirror-updated - DateTime
=item name
=item object-format
=item open-issues-count
=item open-pr-counter
=item original-url
=item owner - see Forgejo::Actor
=item permissions - see Forgejo::Permissions
=item parent
=item private
=item release-counter
=item repo-transfer
=item size
=item ssh-url
=item stars-count
=item template
=item topics - List
=item updated-at - DateTime
=item url
=item watchers-count
=item website
=item wiki-branch
=item wiki-clone-url
=item wiki-ssh-url

=head2 Forgejo::State

=item label
=item ref
=item repo - see Forgejo::Repository
=item repo-id
=item sha
=item user - see Forgejo::Actor

=head2 Forgejo::Tracker

=item allow-only-contributors-to-track-time
=item enable-issue-dependencies
=item enable_time_tracker

=head1 AUTHOR

Elizabeth Mattijsen <liz@raku.rocks>

=head1 COPYRIGHT AND LICENSE

Copyright 2026 Elizabeth Mattijsen

Source can be located at: https://codeberg.org/lizmat/JSON-RepositoryEvent .
Comments and Pull Requests are welcome.

If you like this module, or what I'm doing more generally, committing to a
L<small sponsorship|https://github.com/sponsors/lizmat/>  would mean a great
deal to me!

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

=end pod

# vim: expandtab shiftwidth=4
