code: func ParseWebHook(messageType string, payload []byte) (interface{}, error) {
  	eventType, ok := eventTypeMapping[messageType]
  	if !ok {
  		return nil, fmt.Errorf("unknown X-Github-Event in message: %v", messageType)
  	}
  
  	event := Event{
  		Type:       &eventType,
  		RawPayload: (*json.RawMessage)(&payload),
  	}
  	return event.ParsePayload()
  }
docs: // ParseWebHook parses the event payload. For recognized event types, a
  // value of the corresponding struct type will be returned (as returned
  // by Event.ParsePayload()). An error will be returned for unrecognized event
  // types.
  //
  // Example usage:
  //
  //     func (s *GitHubEventMonitor) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  //       payload, err := github.ValidatePayload(r, s.webhookSecretKey)
  //       if err != nil { ... }
  //       event, err := github.ParseWebHook(github.WebHookType(r), payload)
  //       if err != nil { ... }
  //       switch event := event.(type) {
  //       case *github.CommitCommentEvent:
  //           processCommitCommentEvent(event)
  //       case *github.CreateEvent:
  //           processCreateEvent(event)
  //       ...
  //       }
  //     }
  //