func handleReceivedEvent()

in hello.go [42:84]


func handleReceivedEvent(ctx context.Context, event cloudevents.Event) {
	type LoggedEvent struct {
		Severity  string            `json:"severity"`
		EventType string            `json:"eventType"`
		Message   string            `json:"message"`
		Event     cloudevents.Event `json:"event"`
	}
	type PubSubMessage struct {
		Data string `json:"data"`
	}
	type PubSubEvent struct {
		Message PubSubMessage `json:"message"`
	}

	dataMessage := event.Data()

	// In case of PubSub event, decode its payload to be printed in the message as-is.
	if event.Type() == "google.cloud.pubsub.topic.v1.messagePublished" {
		obj := &PubSubEvent{}
		if err := event.DataAs(obj); err != nil {
			fmt.Printf("Unable to decode PubSub data: %s\n", err.Error())
		}
		decodedMessage, decodingError := base64.StdEncoding.DecodeString(obj.Message.Data)
		if decodingError != nil {
			fmt.Printf("Unable to decode PubSub message: %s\n", decodingError.Error())
		} else {
			dataMessage = decodedMessage
		}
	}

	loggedEvent := LoggedEvent{
		Severity:  "INFO",
		EventType: event.Type(),
		Message:   fmt.Sprintf("Received event of type %s. Event data: %s", event.Type(), dataMessage),
		Event:     event, // Always log full event data
	}
	jsonLog, err := json.Marshal(loggedEvent)
	if err != nil {
		fmt.Printf("Unable to log event to JSON: %s\n", err.Error())
	} else {
		fmt.Printf("%s\n", jsonLog)
	}
}