github.com/google/go-github/v53@v53.2.0/github/event.go (about)

     1  // Copyright 2018 The go-github AUTHORS. All rights reserved.
     2  //
     3  // Use of this source code is governed by a BSD-style
     4  // license that can be found in the LICENSE file.
     5  
     6  package github
     7  
     8  import (
     9  	"encoding/json"
    10  )
    11  
    12  // Event represents a GitHub event.
    13  type Event struct {
    14  	Type       *string          `json:"type,omitempty"`
    15  	Public     *bool            `json:"public,omitempty"`
    16  	RawPayload *json.RawMessage `json:"payload,omitempty"`
    17  	Repo       *Repository      `json:"repo,omitempty"`
    18  	Actor      *User            `json:"actor,omitempty"`
    19  	Org        *Organization    `json:"org,omitempty"`
    20  	CreatedAt  *Timestamp       `json:"created_at,omitempty"`
    21  	ID         *string          `json:"id,omitempty"`
    22  }
    23  
    24  func (e Event) String() string {
    25  	return Stringify(e)
    26  }
    27  
    28  // ParsePayload parses the event payload. For recognized event types,
    29  // a value of the corresponding struct type will be returned.
    30  func (e *Event) ParsePayload() (payload interface{}, err error) {
    31  	switch *e.Type {
    32  	case "BranchProtectionRuleEvent":
    33  		payload = &BranchProtectionRuleEvent{}
    34  	case "CheckRunEvent":
    35  		payload = &CheckRunEvent{}
    36  	case "CheckSuiteEvent":
    37  		payload = &CheckSuiteEvent{}
    38  	case "CodeScanningAlertEvent":
    39  		payload = &CodeScanningAlertEvent{}
    40  	case "CommitCommentEvent":
    41  		payload = &CommitCommentEvent{}
    42  	case "ContentReferenceEvent":
    43  		payload = &ContentReferenceEvent{}
    44  	case "CreateEvent":
    45  		payload = &CreateEvent{}
    46  	case "DeleteEvent":
    47  		payload = &DeleteEvent{}
    48  	case "DeployKeyEvent":
    49  		payload = &DeployKeyEvent{}
    50  	case "DeploymentEvent":
    51  		payload = &DeploymentEvent{}
    52  	case "DeploymentProtectionRuleEvent":
    53  		payload = &DeploymentProtectionRuleEvent{}
    54  	case "DeploymentStatusEvent":
    55  		payload = &DeploymentStatusEvent{}
    56  	case "DiscussionEvent":
    57  		payload = &DiscussionEvent{}
    58  	case "DiscussionCommentEvent":
    59  		payload = &DiscussionCommentEvent{}
    60  	case "ForkEvent":
    61  		payload = &ForkEvent{}
    62  	case "GitHubAppAuthorizationEvent":
    63  		payload = &GitHubAppAuthorizationEvent{}
    64  	case "GollumEvent":
    65  		payload = &GollumEvent{}
    66  	case "InstallationEvent":
    67  		payload = &InstallationEvent{}
    68  	case "InstallationRepositoriesEvent":
    69  		payload = &InstallationRepositoriesEvent{}
    70  	case "IssueCommentEvent":
    71  		payload = &IssueCommentEvent{}
    72  	case "IssuesEvent":
    73  		payload = &IssuesEvent{}
    74  	case "LabelEvent":
    75  		payload = &LabelEvent{}
    76  	case "MarketplacePurchaseEvent":
    77  		payload = &MarketplacePurchaseEvent{}
    78  	case "MemberEvent":
    79  		payload = &MemberEvent{}
    80  	case "MembershipEvent":
    81  		payload = &MembershipEvent{}
    82  	case "MergeGroupEvent":
    83  		payload = &MergeGroupEvent{}
    84  	case "MetaEvent":
    85  		payload = &MetaEvent{}
    86  	case "MilestoneEvent":
    87  		payload = &MilestoneEvent{}
    88  	case "OrganizationEvent":
    89  		payload = &OrganizationEvent{}
    90  	case "OrgBlockEvent":
    91  		payload = &OrgBlockEvent{}
    92  	case "PackageEvent":
    93  		payload = &PackageEvent{}
    94  	case "PageBuildEvent":
    95  		payload = &PageBuildEvent{}
    96  	case "PingEvent":
    97  		payload = &PingEvent{}
    98  	case "ProjectEvent":
    99  		payload = &ProjectEvent{}
   100  	case "ProjectCardEvent":
   101  		payload = &ProjectCardEvent{}
   102  	case "ProjectColumnEvent":
   103  		payload = &ProjectColumnEvent{}
   104  	case "PublicEvent":
   105  		payload = &PublicEvent{}
   106  	case "PullRequestEvent":
   107  		payload = &PullRequestEvent{}
   108  	case "PullRequestReviewEvent":
   109  		payload = &PullRequestReviewEvent{}
   110  	case "PullRequestReviewCommentEvent":
   111  		payload = &PullRequestReviewCommentEvent{}
   112  	case "PullRequestReviewThreadEvent":
   113  		payload = &PullRequestReviewThreadEvent{}
   114  	case "PullRequestTargetEvent":
   115  		payload = &PullRequestTargetEvent{}
   116  	case "PushEvent":
   117  		payload = &PushEvent{}
   118  	case "ReleaseEvent":
   119  		payload = &ReleaseEvent{}
   120  	case "RepositoryEvent":
   121  		payload = &RepositoryEvent{}
   122  	case "RepositoryDispatchEvent":
   123  		payload = &RepositoryDispatchEvent{}
   124  	case "RepositoryImportEvent":
   125  		payload = &RepositoryImportEvent{}
   126  	case "RepositoryVulnerabilityAlertEvent":
   127  		payload = &RepositoryVulnerabilityAlertEvent{}
   128  	case "SecretScanningAlertEvent":
   129  		payload = &SecretScanningAlertEvent{}
   130  	case "SecurityAdvisoryEvent":
   131  		payload = &SecurityAdvisoryEvent{}
   132  	case "StarEvent":
   133  		payload = &StarEvent{}
   134  	case "StatusEvent":
   135  		payload = &StatusEvent{}
   136  	case "TeamEvent":
   137  		payload = &TeamEvent{}
   138  	case "TeamAddEvent":
   139  		payload = &TeamAddEvent{}
   140  	case "UserEvent":
   141  		payload = &UserEvent{}
   142  	case "WatchEvent":
   143  		payload = &WatchEvent{}
   144  	case "WorkflowDispatchEvent":
   145  		payload = &WorkflowDispatchEvent{}
   146  	case "WorkflowJobEvent":
   147  		payload = &WorkflowJobEvent{}
   148  	case "WorkflowRunEvent":
   149  		payload = &WorkflowRunEvent{}
   150  	}
   151  	err = json.Unmarshal(*e.RawPayload, &payload)
   152  	return payload, err
   153  }
   154  
   155  // Payload returns the parsed event payload. For recognized event types,
   156  // a value of the corresponding struct type will be returned.
   157  //
   158  // Deprecated: Use ParsePayload instead, which returns an error
   159  // rather than panics if JSON unmarshaling raw payload fails.
   160  func (e *Event) Payload() (payload interface{}) {
   161  	var err error
   162  	payload, err = e.ParsePayload()
   163  	if err != nil {
   164  		panic(err)
   165  	}
   166  	return payload
   167  }