code: func ParseEvent(rawEvent json.RawMessage, opts ...Option) (EventsAPIEvent, error) {
  	e, err := parseOuterEvent(rawEvent)
  	if err != nil {
  		return EventsAPIEvent{}, err
  	}
  
  	cfg := &Config{}
  	cfg.VerificationToken = e.Token
  	for _, opt := range opts {
  		opt(cfg)
  	}
  
  	if !cfg.TokenVerified {
  		return EventsAPIEvent{}, errors.New("Invalid verification token")
  	}
  
  	if e.Type == CallbackEvent {
  		cbEvent := e.Data.(*EventsAPICallbackEvent)
  		innerEvent, err := parseInnerEvent(cbEvent)
  		if err != nil {
  			err := fmt.Errorf("EventsAPI Error parsing inner event: %s, %s", innerEvent.Type, err)
  			return EventsAPIEvent{
  				"",
  				"",
  				"unmarshalling_error",
  				&slack.UnmarshallingErrorEvent{ErrorObj: err},
  				EventsAPIInnerEvent{},
  			}, err
  		}
  		return innerEvent, nil
  	}
  	urlVerificationEvent := &EventsAPIURLVerificationEvent{}
  	err = json.Unmarshal(rawEvent, urlVerificationEvent)
  	if err != nil {
  		return EventsAPIEvent{
  			"",
  			"",
  			"unmarshalling_error",
  			&slack.UnmarshallingErrorEvent{ErrorObj: err},
  			EventsAPIInnerEvent{},
  		}, err
  	}
  	return EventsAPIEvent{
  		e.Token,
  		e.TeamID,
  		e.Type,
  		urlVerificationEvent,
  		EventsAPIInnerEvent{},
  	}, nil
  }
docs: // ParseEvent parses the outter and inner events (if applicable) of an events
  // api event returning a EventsAPIEvent type. If the event is a url_verification event,
  // the inner event is empty.