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 }