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